← все скрипты

docker-cleanup.sh

bash ~ 35 строк обновлён 18 марта 2026

Безопасная очистка Docker: удаляет остановленные контейнеры, неиспользуемые образы и осиротевшие volumes. Перед удалением показывает, что именно будет убрано, и ждёт подтверждения.

Зависимости

Использование

chmod +x docker-cleanup.sh

# Интерактивный режим (с подтверждением)
./docker-cleanup.sh

# Автоматический режим (для cron)
./docker-cleanup.sh --force

Код

#!/usr/bin/env bash
set -euo pipefail

# docker-cleanup.sh — безопасная очистка Docker

FORCE="${1:-}"

echo "=== Docker Cleanup ==="
echo ""

# Остановленные контейнеры
STOPPED=$(docker ps -aq --filter status=exited 2>/dev/null | wc -l || echo 0)
echo "Остановленных контейнеров: $STOPPED"

# Неиспользуемые образы (dangling)
DANGLING=$(docker images -q --filter dangling=true 2>/dev/null | wc -l || echo 0)
echo "Неиспользуемых образов: $DANGLING"

# Осиротевшие volumes
VOLUMES=$(docker volume ls -q --filter dangling=true 2>/dev/null | wc -l || echo 0)
echo "Осиротевших volumes: $VOLUMES"
echo ""

if [ "$STOPPED" -eq 0 ] && [ "$DANGLING" -eq 0 ] && [ "$VOLUMES" -eq 0 ]; then
    echo "Нечего удалять. Всё чисто."
    exit 0
fi

if [ "$FORCE" != "--force" ]; then
    read -rp "Удалить всё перечисленное? [y/N] " CONFIRM
    if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
        echo "Отменено."
        exit 0
    fi
fi

if [ "$STOPPED" -gt 0 ]; then docker container prune -f; fi
if [ "$DANGLING" -gt 0 ]; then docker image prune -f; fi
if [ "$VOLUMES" -gt 0 ]; then docker volume prune -f; fi

echo ""
echo "Очистка завершена."