Как освободить место, которое занял Docker
Сначала посмотрите, что именно занимает место:
docker system dfСтроки — образы (Images), контейнеры (Containers), тома (Local Volumes) и кэш сборки (Build Cache). Столбец RECLAIMABLE — сколько можно освободить. Подробно по каждому объекту — docker system df -v.
Освобождайте по порядку
Идите от безопасного к опасному и после каждого шага проверяйте место (docker system df или df -h). Если образов и томов мало, а папка /var/lib/docker всё равно растёт, — проверьте логи.
Висячие образы и кэш сборки
Эти команды не трогают работающие контейнеры, нужные образы и данные:
Bash docker image prune docker builder pruneПервая удаляет «висячие» образы — без тега и без контейнеров. Они остаются после обновлений (
docker pull) и пересборок. Вторая — неиспользуемый кэш сборки, который особенно разрастается у тех, кто часто собирает свои образы. Обе спрашивают подтверждение.Места стало достаточно — на этом можно остановиться.
Не помогло — дальше: «Остановленные контейнеры и лишние образы»
Остановленные контейнеры и лишние образы
Bash docker container prune docker image prune -acontainer pruneудаляет все остановленные контейнеры;image prune -aудаляет все образы, из которых не создано ни одного контейнера. Нужные позже образы просто скачаются заново.
Или всё вместе (остановленные контейнеры, неиспользуемые сети, образы без контейнеров и кэш сборки):
Bash docker system prune -aПеред
system prune -aиcontainer pruneпосмотритеdocker ps -a. Остановленный на время сервис считается мусором: его контейнер удалится, а с ним и всё, что лежало в его слое, не в томе.Места стало достаточно — тома трогать не нужно.
Тома — осторожно
Тома часто занимают больше всего — в них базы данных. Docker никогда не удаляет их сам.
Bash docker volume ls docker volume ls --filter dangling=true docker volume pruneВторая команда показывает тома, к которым не подключён ни один контейнер.
docker volume pruneудаляет из них только анонимные (со случайными длинными именами).docker volume prune -aиdocker system prune --volumesудаляют данные навсегда. Том базы, чей проект вы остановили черезdocker compose down, ни к одному контейнеру не подключён — и будет удалён. Удаляйте тома по одному, по имени, когда точно знаете, что в них:docker volume rm имя.Место освободилось — убедитесь по
docker volume ls, что тома нужных баз на месте.
Логи
Большие логи — частая причина того, что /var/lib/docker растёт, хотя образов мало. Найти самые крупные:
sudo sh -c 'du -h /var/lib/docker/containers/*/*-json.log | sort -h | tail -5'Ограничить их рост для новых контейнеров — параметры max-size и max-file в /etc/docker/daemon.json (урок Обновление и очистка места).
Чего не делать
Не удаляйте файлы и папки в /var/lib/docker вручную (overlay2, containers, volumes). Docker хранит учёт этих файлов, и после ручного удаления образы и контейнеры ломаются, а освободить место правильно становится сложнее.
Если диск заполнен целиком и Docker пишет no space left on device, начните с docker image prune -a и docker builder prune — обычно это быстро возвращает гигабайты. Если места под Docker в принципе мало, его папку данных можно перенести на другой диск параметром data-root в daemon.json — это описано в документации Docker.