Linux

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

Docker накапливает остановленные контейнеры, старые образы и неиспользуемые тома, что может занимать гигабайты дискового пространства. В этом гайде вы научитесь безопасно и эффективно выполнять очистку Docker-окружения на Linux.

Обновлено 15 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Docker Engine 20.10+Ubuntu 20.04/22.04CentOS 8/Rocky 9Debian 11/12

Введение / Зачем это нужно

Docker — отличный инструмент, но со временем он может накопить значительное количество "мусорных" данных: остановленные контейнеры, старые и дублирующие образы (dangling images), неиспользуемые сети и тома. Эти артефакты могут занимать от сотен мегабайт до нескольких гигабайт дискового пространства. Регулярная очистка Docker — важная практика для поддержания здоровья системы, особенно на серверах с ограниченным дисковым пространством или в CI/CD-окружениях. Этот гайд покажет вам, как безопасно и эффективно выполнить очистку на любой Linux-системе.

Требования / Подготовка

Перед началом убедитесь в следующем:

  1. На вашей системе установлен и запущен Docker Engine (демон dockerd).
  2. Ваш пользователь имеет права на выполнение команд Docker (обычно через группу docker). Для многих команд очистки, особенно полной, потребуются права sudo.
  3. Вы понимаете, что удаление образов и томов — необратимое действие. Убедитесь, что в удаляемых томах нет важных данных (например, баз данных).
  4. Рекомендуется сначала выполнить создание бэкапов критически важных данных или состояние контейнеров (через docker commit), если это необходимо.

Пошаговая инструкция

Шаг 1: Проверьте текущее использование диска Docker

Сначала давайте посмотрим, что именно занимает место. Команда docker system df покажет сводку по типам ресурсов.

docker system df

Вывод будет примерно таким:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        3         4.2GB     2.1GB (49%)
Containers      8         2         120MB     80MB (66%)
Local Volumes  12        5         3.5GB     1.8GB (51%)
Build Cache     0         0         0B        0B

Обратите внимание на столбец RECLAIMABLE — это примерный объём, который можно освободить после очистки.

Шаг 2: Удалите остановленные контейнеры

Остановленные контейнеры (Exited или Created) потребляют немного места, но их может быть много. Удалить все остановленные контейнеры можно командой:

docker container prune

По умолчанию команда запросит подтверждение. Чтобы пропустить запрос, добавьте флаг -f или --force:

docker container prune -f

Что делает команда: удаляет все контейнеры в состоянии created или exited. Работающие (running) контейнеры не затронуты.

Шаг 3: Удалите неиспользуемые образы

Это самый важный шаг для освобождения места. Здесь есть два основных варианта:

3.1 Удалить только "висячие" (dangling) образы Dangling images — это образы, у которых нет ни одного тега и которые не являются родительскими для других образов. Обычно они появляются после сборки новых версий или при обновлениях.

docker image prune

Эта команда удалит только dangling images. С флагом -a или --all она удалит все образы, не используемые ни одним контейнером (включая те, у которых есть теги).

3.2 Удалить ВСЕ неиспользуемые образы (включая с тегами) Это более агрессивная и эффективная команда. Она удалит все образы, на которые нет ссылок из существующих (даже остановленных) контейнеров.

docker image prune -a

Важно: Если у вас есть контейнеры, созданные из определённых образов (даже остановленные), эти образы не будут удалены. Чтобы удалить и их, нужно сначала удалить сами контейнеры (см. Шаг 2).

Вы можете добавить фильтр по времени, например, удалить образы, не использованные последние 24 часа:

docker image prune -a --filter "until=24h"

Шаг 4: Удалите неиспользуемые сети и тома

4.1 Очистка сетей Пользовательские сети (не bridge, host, none) могут оставаться после удаления контейнеров.

docker network prune

Эта команда удалит все сети, не используемые хотя бы одним контейнером.

4.2 Очистка томов (Volumes) Тома (volumes) — это самый "тяжёлый" по объёму ресурс, особенно если в них хранились данные БД. Удалите только неиспользуемые тома:

docker volume prune

Критически важно: Эта команда безвозвратно удалит все данные в томах, которые не подключены к существующим контейнерам. Перед выполнением дважды проверьте, что вам не нужны данные из этих томов. Вы можете сначала посмотреть список всех томов и их размер:

docker volume ls -q | xargs docker volume inspect --format '{{.Name}} {{.Mountpoint}} {{.UsageData.Size}}' | sort -k3 -h

Или более простой вариант:

docker system df -v

В выводе будет блок VOLUME NAME с указанием размера.

Шаг 5: Выполните полную очистку (опционально)

Если вы хотите выполнить всё вышеперечисленное за одну команду, используйте docker system prune. Это "швейцарский нож" для очистки.

Базовая полная очистка:

docker system prune

Эта команда удалит:

  • Все остановленные контейнеры.
  • Все сети, не используемые хотя бы одним контейнером.
  • Все dangling образы.
  • Кэш сборки (build cache).

Максимально агрессивная очистка (с флагом -a):

docker system prune -a

Эта команда удалит всё, что не используется:

  • Все остановленные контейнеры.
  • Все сети, не используемые.
  • Все образы, не имеющие связанных контейнеров (даже с тегами!).
  • Кэш сборки.

С подтверждением: По умолчанию команда prune запросит подтверждение. Чтобы выполнить без вопросов, добавьте --force или -f:

docker system prune -a -f

Предупреждение: Команда -a может удалить образы, которые вы планировали использовать позже. Убедитесь, что у вас есть Dockerfile или способ быстро пересобрать нужные образы.

Проверка результата

После завершения очистки снова выполните команду из Шага 1:

docker system df

Сравните значения в столбце SIZE и особенно RECLAIMABLE. Значение RECLAIMABLE должно стремиться к нулю, а общий размер (SIZE) — значительно уменьшиться. Вы также можете проверить свободное место на диске командой df -h.

Возможные проблемы

Проблема 1: Ошибка "Error: No such image" или "conflict: unable to delete..."

  • Причина: Попытка удалить образ, который является родительским для другого образа или используется (даже остановленным) контейнером.
  • Решение: Сначала удалите все контейнеры, основанные на этом образе (docker ps -a для поиска, docker rm для удаления). Если образ "застрял" как родительский, часто помогает принудительное удаление с -f или полная очистка через docker system prune -a.

Проблема 2: Ошибка доступа (permission denied)

  • Причина: Запуск команды без прав sudo.
  • Решение: Добавьте sudo перед командой (например, sudo docker system prune -a) или убедитесь, что ваш пользователь в группе docker (groups $USER), и перезайдите в систему.

Проблема 3: Тома не удаляются, хотя контейнеры удалены

  • Причина: Тома, созданные с флагом --name или через docker volume create, не удаляются автоматически при удалении контейнера.
  • Решение: Проверьте список всех томов (docker volume ls). Тома, которые не используются (<none> в колонке CONTAINER), можно удалить вручную (docker volume rm <volume_name>) или через docker volume prune.

Проблема 4: Недостаточно места для выполнения операций

  • Причина: Диск заполнен на 100%, и Docker не может создать временные файлы для операций.
  • Решение: Временно очистите другие файлы (например, кэш пакетного менеджера: sudo apt clean для Ubuntu/Debian, sudo yum clean all для CentOS/RHEL) или удалите вручную старые логи (/var/lib/docker/containers/*/*.log).

Часто задаваемые вопросы

Будет ли работать очистка Docker без sudo?
Можно ли удалить только определенные образы, а не все?
Что такое dangling volumes и как их удалить?
Очистка повлияет на работающие контейнеры?

Полезное

Проверьте текущее использование диска Docker
Удалите остановленные контейнеры
Удалите неиспользуемые образы
Удалите неиспользуемые сети и тома
Выполните полную очистку (опционально)