Ошибки

Docker занял весь диск: no space left on device — что можно удалить

Docker хранит старые образы, остановленные контейнеры, кэш сборки и логи, и сам их не удаляет. Посмотрите, что занимает место, удалите лишнее и ограничьте логи, чтобы диск не заполнился снова.

Обновлено 10.10.2026≈ 4 мин чтения
Содержание 7

Как выглядит ошибка

Сборка образа, скачивание или сам контейнер останавливаются с сообщением, в конце которого стоит:

no space left on device

Это не ошибка Docker, а ответ системы: на диске сервера нет места. Команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Сколько места осталось:

df -h /

В колонке Use% — сколько занято. 100% — диск заполнен.

Шаг 1. Посмотрите, что занял Docker

docker system df

Команда показывает четыре строки:

СтрокаЧто это
ImagesОбразы
ContainersКонтейнеры: то, что программы записали внутрь них
Local VolumesТома — данные: базы, загруженные файлы
Build CacheКэш сборки образов

Колонка SIZE — сколько занято, RECLAIMABLE — сколько можно освободить. Логи контейнеров здесь не видны — о них шаг 3.

Шаг 2. Удалите лишнее

Тома не удаляйте: в них базы данных и файлы ваших сайтов. Поэтому не добавляйте к командам ниже флаг --volumes.

Одна команда удаляет остановленные контейнеры, неиспользуемые сети, образы без имени и кэш сборки:

docker system prune

Docker перечислит, что удалит, и спросит:

WARNING! This will remove:
  …
Are you sure you want to continue? [y/N]

Проверьте, нет ли среди остановленных контейнеров нужных: список покажет docker ps -a, у остановленных в колонке STATUS — Exited. Если всё в порядке, наберите y и нажмите Enter. В конце Docker напишет Total reclaimed space: — сколько места освободилось.

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

docker image prune -a

Удалятся и старые версии ваших образов. Если понадобятся, Docker скачает или вы соберёте их заново. Кэш сборки целиком удаляет docker builder prune -a — следующая сборка пойдёт дольше.

Шаг 3. Проверьте логи контейнеров

Всё, что программа в контейнере пишет на экран, Docker сохраняет в файл. По умолчанию этот файл ничем не ограничен и может вырасти на весь диск. Где лежит лог контейнера и сколько он весит — В примерах контейнер называется web — подставьте имя своего контейнера. Имена видны в последней колонке NAMES команды docker ps -a.

sudo du -h "$(docker inspect -f '{{.LogPath}}' web)"

Если лог большой, ограничьте логи. Откройте файл настроек Docker (как работать в редакторе — в разделе про nano):

sudo nano /etc/docker/daemon.json

Если файл пустой, вставьте:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Это до трёх файлов по 10 МБ на контейнер. Числа пишутся в кавычках. Если в файле уже есть настройки, добавьте эти строки к ним через запятую, а не вместо них. Другой вариант, который советует сам Docker, — драйвер local, он описан в статье VPS для разработчика: ограничьте логи.

Сохраните файл (Ctrl+O, Enter, Ctrl+X) и перезапустите Docker. Контейнеры на это время остановятся:

sudo systemctl restart docker

Ограничение действует только на новые контейнеры. Пересоздайте свои — для проекта на docker compose в его папке:

docker compose up -d --force-recreate

Если Docker после перезапуска не стартует, в daemon.json ошибка — разбор на странице Cannot connect to the Docker daemon.

Как проверить

df -h /
docker system df

В Use% процент должен уменьшиться, а в RECLAIMABLE — остаться немного.

Тексты ошибок сверены с исходным кодом Docker 29.1.3 — эта версия ставится из пакетов Ubuntu 24.04. В Docker 28 и более старых версиях часть сообщений звучит иначе.

Источники

Сверено 10 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 10.10.2026