Skip to content

This article is available in Russian. An English version is on the way.Open the Russian page

Docker занял диск: уборка и лимиты логов

Найти, что занимает место, безопасно удалить лишнее и ограничить рост логов контейнеров.

Level
Beginner
Reading time
2 min read
Updated
Tested on
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Contents
  1. Что занимает место
  2. Безопасная уборка
  3. Логи контейнеров
  4. Проверьте результат
  5. Частые ошибки

Со временем Docker накапливает старые образы, остановленные контейнеры, кэш сборки и логи. На небольшом диске это заканчивается ошибкой no space left on device. Разберёмся, что можно удалять, а что — нет.

Что занимает место

bash
$ df -h /$ docker system df$ du -sh /var/lib/docker

docker system df показывает объём образов, контейнеров, томов и кэша сборки, а в колонке RECLAIMABLE — сколько можно освободить.

Безопасная уборка

Остановленные контейнеры, образы без тегов, кэш сборки
$ docker container prune -f$ docker image prune -f$ docker builder prune -f

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

bash
$ docker image prune -a -f

Логи контейнеров

По умолчанию драйвер json-file пишет логи без ограничения размера. Найти самые большие:

bash
$ du -h /var/lib/docker/containers/*/*-json.log | sort -h | tail -5

Задайте лимит для всех новых контейнеров в /etc/docker/daemon.json:

/etc/docker/daemon.json
{  "log-driver": "json-file",  "log-opts": {    "max-size": "20m",    "max-file": "3"  }}
bash
$ systemctl restart docker

Если диск уже заполнен и место нужно немедленно, лог можно обнулить, не останавливая контейнер (подставьте полный id контейнера):

bash
$ truncate -s 0 /var/lib/docker/containers/<id>/<id>-json.log

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

bash
$ docker system df$ docker inspect --format "{{.HostConfig.LogConfig}}" имя-контейнера

У пересозданных контейнеров в LogConfig должны появиться max-size и max-file.

Частые ошибки

  • Ошибка в daemon.json (например, лишняя запятая) — Docker не запустится. Смотрите journalctl -u docker после перезапуска.
  • Удаление файлов в /var/lib/docker вручную ломает состояние Docker. Пользуйтесь командами prune.
  • Место не освободилось после rm лога — файл всё ещё открыт процессом. Используйте truncate.

Read to the end and the article counts toward your learning progress.

  • docker
  • место на диске
  • prune
  • логи
  • очистка

Was this article helpful?