Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Linux / DevOps

Очистка Docker: как удалить остановленные контейнеры и образы (docker system prune)

Обновлено: 27.08.2026 · Официальная документация ↗

Почему Docker незаметно пожирает все свободное место на диске

Docker обладает особенностью: при обновлении контейнеров старые версии образов (Images), остановленные контейнеры и временные сборочные кэши (Build Cache) не удаляются автоматически. Со временем системная директория /var/lib/docker/ разрастается до сотен гигабайт, приводя к критической системной ошибке «No space left on device». Веб-сайты и базы данных экстренно останавливаются из-за нехватки диска.

Анализ дискового пространства Docker

Узнаем, сколько именно места занимают компоненты Docker:

docker system df

Команда наглядно покажет размер контейнеров, образов, томов (Volumes) и процент данных, которые можно безопасно удалить (Reclaimable).

Пошаговый регламент очистки диска от мусора Docker

Шаг 1: Быстрая безопасная очистка (docker system prune)

Удалим все остановленные контейнеры, неиспользуемые виртуальные сети и «висячие» (dangling) слои образов без тегов:

docker system prune -f

(Эта команда абсолютно безопасна: она не трогает работающие контейнеры и постоянные тома данных).

Шаг 2: Глубокая очистка всех неиспользуемых образов (флаг -a)

Если на диске все еще мало места, удалим вообще ВСЕ скачанные образы, которые не привязаны к работающим прямо сейчас контейнерам:

docker system prune -a -f

Шаг 3: Экстренная очистка с удалением забытых томов данных (--volumes)

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

docker system prune -a --volumes -f

Шаг 4: Очистка гигантских JSON-логов работающих контейнеров

Иногда место забивают не образы, а логи работающего контейнера в формате JSON. Быстро обнулите все лог-файлы контейнеров без их перезапуска:

sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'

Шаг 5: Проверка освобожденного места

df -h /var/lib/docker
docker system df

Типовые ошибки администраторов

  • Случайное удаление томов с базой данных: Запуск docker system prune --volumes на сервере, где база данных была временно остановлена, приведет к безвозвратному удалению тома с таблицами MySQL/PostgreSQL. Перед очисткой всегда проверяйте, что важные контейнеры запущены!
  • Отсутствие лимитов на логирование в daemon.json: Если не настроить ротацию логов Docker, контейнер с ошибками может генерировать сотни гигабайт текстовых логов за сутки.
Сервер регулярно падает из-за нехватки дискового пространства в Docker?
Инженеры ITSTM настроят централизованную ротацию логов, автоматическую сборку мусора по расписанию и мониторинг дисковых квот.
💡 Практика специалистов: Добавьте в системный планировщик cron еженедельное выполнение команды '0 4 * * 0 /usr/bin/docker system prune -f' в ночное воскресное окно. Это гарантирует стабильное наличие свободного места на сервере без необходимости ручного вмешательства администратора.

Частые вопросы (FAQ)

Удалит ли команда docker system prune работающие контейнеры?

Нет. Команда затрагивает исключительно остановленные контейнеры. Все работающие службы продолжат функционировать без сбоев.

Как удалить только один конкретный старый Docker-образ?

Посмотрите список образов 'docker images', найдите Image ID и удалите его: 'docker rmi ID_образа'.

Как настроить автоматическое ограничение размера логов для всех контейнеров Docker?

В файле /etc/docker/daemon.json пропишите: '{"log-driver": "json-file", "log-opts": {"max-size": "50m", "max-file": "3"}}' и перезапустите docker daemon.

Что такое 'Dangling Images' в Docker?

Это безымянные промежуточные слои образов (отображаются со статусом <none>:<none>), которые остались после пересборки новых версий ваших контейнеров.

Полезные материалы
Рекомендуем