Что делать, если в Docker-контейнере закончилось место?

«Что делать, если в Docker-контейнере закончилось место?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Первым делом я проверю, что именно занимает место, с помощью docker system df. Затем выполню очистку в следующем порядке:

  1. Удалю остановленные контейнеры, образы и вольюмы:

    # Удалить все неиспользуемые объекты (остановленные контейнеры, образы без тегов, сети, билд-кеш)
    docker system prune -a --volumes

    Важно: Флаг --volumes удалит и неиспользуемые тома, поэтому перед этим нужно убедиться, что в них нет нужных данных.

  2. Проверю логи контейнеров. Часто именно они "съедают" место в /var/lib/docker. Я настрою лимиты для драйвера журналирования, например, в docker-compose.yml:

    services:
      myapp:
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  3. Проанализирую использование внутри работающего контейнера. Если проблема в данных приложения, зайду внутрь и проверю:

    docker exec -it <container_name> sh -c "df -h && du -sh /var/log/* 2>/dev/null | sort -hr | head -20"
  4. Для долгосрочного решения:

    • Переключусь на драйвер хранения overlay2, если используется устаревший.
    • Увеличу место на корневом разделе, где расположен /var/lib/docker.
    • Внедрю централизованное логирование (ELK Stack, Loki) и отключу локальное хранение логов в контейнерах.