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