Docker Linux

Docker: no space left on device

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Ошибка Docker «no space left on device» значит, что на диске закончилось место. Проверьте docker system df, удалите неиспользуемые образы, контейнеры, тома и кэш сборки, настройте ротацию логов контейнеров.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

#Что означает ошибка

Сообщение
no space left on device

Docker хранит образы, слои, контейнеры, тома и логи в каталоге данных Docker (часто /var/lib/docker, но точный путь показывает docker info --format "{{.DockerRootDir}}"). Когда раздел заполняется, сборка и запуск прекращаются с no space left on device. Часто место занимают не нужные данные, а накопившиеся образы, остановленные контейнеры, кэш сборки и JSON-логи контейнеров без ротации. Прежде чем удалять, посмотрите, что именно занимает место.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Старые образы и контейнерыНакопились неиспользуемые образы.docker images показывает много <none>.Очистите.
Кэш сборкиКэш BuildKit разросся.docker system df — большой Build Cache.Очистите кэш сборки.
Разросшиеся логи контейнеровЛоги без ротации.Файлы *-json.log по гигабайтам.Настройте ротацию.
Тома с даннымиДанные приложений занимают место.Большие тома БД.Проверьте тома, вынесите данные.

#Пошаговое решение

  1. Проверьте местоНа Linux-сервере Docker подключитесь по SSH и выполните df -h и df -i. Первый вывод показывает свободные гигабайты, второй — оставшиеся inode (маленькие файлы тоже могут исчерпать ресурс). Узнайте каталог данных Docker через docker info --format "{{.DockerRootDir}}" и проверьте раздел, на котором он находится, например df -h /var/lib/docker, если путь именно такой. Не начинайте удаление, пока не определили заполненный раздел.
  2. Посмотрите использование DockerВ том же терминале выполните docker system df -v, чтобы увидеть размер образов, остановленных контейнеров, локальных томов и кэша сборки. Сравните эти цифры с общим расходом раздела: если Docker занимает мало, причина может находиться в обычных логах системы или другом приложении. Перед очисткой сохраните сведения о действующих контейнерах командой docker ps -a.
  3. Удалите остановленные контейнерыЕсли уверены, что остановленные контейнеры не понадобятся для диагностики или восстановления, выполните docker container prune и прочитайте список/подтверждение. Команда удаляет только остановленные контейнеры, но их записываемый слой может содержать единственный экземпляр файлов, не вынесенных в том; прежде проверьте необходимость резервной копии. Контейнеры Up команда не удаляет. При сомнениях не подтверждайте очистку.
  4. Удалите неиспользуемые образыДля удаления старых образов сначала выполните docker image ls -a, сравните теги с развёрнутыми приложениями и сохраните нужные версии для отката. Команда docker image prune без -a удаляет лишь висячие образы; -a может убрать все образы, не связанные с контейнерами, и потребовать повторной загрузки. Начните с более осторожного варианта, не запускайте полную очистку как обязательную.
  5. Очистите кэш сборкиЕсли основное место занял кэш сборки, выполните docker builder du (если команда поддерживается вашей версией Docker) и затем docker builder prune только после проверки. Программа покажет, сколько данных может быть удалено, и запросит подтверждение. Кэш ускоряет последующие сборки, но обычно может быть сформирован заново; не используйте одновременно docker system prune -a --volumes, если не понимаете, какие данные исчезнут.
  6. Проверьте томаТома Docker часто содержат БД и загруженные пользователями файлы. Просмотрите docker volume ls, для нужного тома выполните docker volume inspect ИМЯ, подставив реальное имя; сопоставьте его с Compose-проектом и резервными копиями. НЕ запускайте docker volume prune до понимания, где рабочие данные: удалённый том нельзя гарантированно восстановить. Если объём тома растёт, очищайте содержимое штатными средствами приложения.
  7. Найдите большие логиДля контейнеров с журналом json-file администратор может посмотреть размер логов в каталоге Docker, выяснив реальный RootDir через docker info. На Linux выполните sudo du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -h | tail, если Docker использует стандартный путь. Не редактируйте и не удаляйте открытые файлы логов руками: это может нарушить учёт места и работу контейнера. Для других драйверов журналирования маршрут иной.
  8. Настройте ротацию логовЧтобы ограничить рост логов новых контейнеров, администратор после резервной копии откроет конфигурацию Docker daemon (/etc/docker/daemon.json, если используется), добавит настройки log-driver и log-opts по документации Docker и проверит корректность JSON. Изменение настроек движка часто требует перезапуска и пересоздания контейнеров, а это влияет на работающие сайты. Запланируйте обслуживание и проверьте, что вновь созданные контейнеры используют нужные ограничения.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Команды prune удалены из общего списка, выполнять только адресно после проверки состава и резервных копий
    Linux · Терминал (Bash)Команда
    Команды prune удалены из общего списка, выполнять только адресно после проверки состава и резервных копий
    # Только безопасная оценка до очистки
    df -h
    df -i
    docker info --format "{{.DockerRootDir}}"
    docker system df -v
    docker ps -a
    docker image ls -a
    docker volume ls
    Вариант 2Ротация логов контейнеров в /etc/docker/daemon.json.
    JSON
    Ротация логов контейнеров в /etc/docker/daemon.json.
    {
      "log-driver": "json-file",
      "log-opts": { "max-size": "10m", "max-file": "3" }
    }

Если нужно срочно освободить место, начните с логов: обнулить конкретный лог можно командой truncate -s 0 /var/lib/docker/containers/ID/ID-json.log (контейнер продолжит работать). Для долгосрочной работы перенесите каталог данных Docker на отдельный диск (data-root в daemon.json). В Docker Desktop (Windows/macOS) размер виртуального диска задаётся в Settings → Resources → Disk image size; после очистки сожмите образ. Проверьте и inode: образы с миллионами мелких файлов исчерпывают их раньше места. Документация — Docker: prune.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.