#Что означает ошибка и при каких условиях возникает
Проверьте фактическое хранилище Docker, квоту виртуального диска, inode и кэш сборки до удаления образов или томов. Сообщение ENOSPC иногда относится к разделу Docker Root Dir, виртуальному диску Docker Desktop, ограничению writable layer или исчерпанию inode, а не к тому диску, который вы открыли в проводнике.
#Как различить причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Заполнен другой раздел или виртуальный дискDocker Engine использует свой каталог данных, Docker Desktop — виртуальную Linux-систему и файл диска. | Основной системный раздел свободен, но docker info показывает другой Root Dir или виртуальное хранилище полно. | Найти и проверить фактический Docker storage, не переносить вручную. |
| Исчерпаны inodeВ Linux каждый файл и каталог расходует inode; множество маленьких файлов исчерпывает их раньше байтов. | В df -i IUse% близко к 100%, тогда как df -h показывает свободные гигабайты. | Найти источник множества файлов, согласовать адресную очистку. |
| Занято много места образами, слоями и кэшемСтарые образы, остановленные контейнеры и кэш сборки занимают внутреннее место. | docker system df -v показывает большие значения Build Cache или Images. | Проверить использование и очищать только заведомо ненужное после сверки зависимостей. |
| Ограничение конкретного тома или приложенияЗаданная квота на том, tmpfs или файлы журнала может приводить к ENOSPC отдельно от корня Docker. | Ошибка касается только определённой записи и повторяется при небольшой нагрузке. | Проверить Mounts, размер tmpfs и политику хранения журналов. |
#Пошаговая диагностика и исправление
- Сохраните вывод ошибки и прекратите неудачные повторыЗапишите команду, при которой возникает
no space left on device:docker build,docker pull, запуск базы или запись из приложения. Не выполняйте автоматическое удаление всех образов/томов и не расширяйте раздел без снимка/копии. Если база данных сигнализирует о нехватке места, остановите операции записи контролируемым способом и уведомите администратора, чтобы не усугубить повреждение данных. - Определите, где работает DockerОткройте терминал: Windows — «Пуск» → PowerShell, macOS — «Программы» → «Утилиты» → «Терминал», Linux — терминал рабочего стола. Выполните
docker versionиdocker info --format "{{.DockerRootDir}}". Ответ/var/lib/dockerотносится к Linux-движку, но на Docker Desktop это путь внутри его виртуальной системы, а не обычная папка диска Windows. Если команда выдаёт Cannot connect to the Docker daemon, сначала запустите Docker Desktop или проверьте службу с администратором. - Получите сводку использования без удаленияВыполните
docker system df -vи запишите разделы Images, Containers, Local Volumes и Build Cache. Команда ничего не удаляет. Значение Reclaimable — оценка доступного к очистке, а не приказ удалять; образы могут понадобиться для отката. Если вывод слишком большой, сохраните его локально и не публикуйте имена частных образов. - В Linux отдельно проверьте место и количество inodeЕсли Docker Engine установлен непосредственно на Linux, выполните
df -hиdf -i. По выводуdocker infoопределите файловую систему, где расположен Docker Root Dir, и найдите соответствующую строку в df.-hпоказывает объём в удобном формате,-i— использование inode; 100% по любому из этих показателей объясняет ENOSPC. Команды выполняются от обычного пользователя и не изменяют диск. - В Docker Desktop проверьте настройки выделенного дискаОткройте Docker Desktop → Settings (значок шестерёнки) → Resources. В зависимости от ОС и версии там находятся ограничения виртуального диска и его расположение; на некоторых версиях конкретный пункт отличается. Сверьте выделенный размер и свободное пространство хоста. Не переносите образ виртуального диска вручную через Проводник/Finder; делайте изменения только штатным интерфейсом после резервного копирования и проверки достаточности места.
- Найдите конкретный источник расходаЕсли ENOSPC возникает при сборке, смотрите Build Cache и логи этапа, а не сразу удаляйте тома. Если ошибка при записи приложения, проверьте
docker inspectдля его Mounts и используемые каталоги, квоты и tmpfs. При больших Local Volumes сначала выясните их назначение и сделайте логические резервные копии баз. Не трогайте каталоги Docker Root Dir вручную: это может повредить метаданные движка. - Освободите место адресно, а не общей очисткойСначала удалите или перенесите обычные ненужные файлы вне Docker на нужном разделе, если это безопасно. Если именно кэш сборки велик и у вас есть разрешение, после оценки последствий используйте интерактивный
docker builder pruneбез-a; внимательно прочитайте список/запрос на подтверждение — последующая сборка будет дольше. Не используйте--volumes,docker system prune -aи общую очистку на работающем сервере без учёта зависимостей. - Повторите исходное действие и оцените местоПосле адресного освобождения снова запустите
docker system df -v,df -hиdf -iгде применимо; затем повторите только ту безопасную операцию, на которой была ошибка, например учебную сборку. Ожидается отсутствие ENOSPC и сохранение доступности приложения. Если место не увеличилось, исследуйте квоты, виртуальный диск и файловую систему с администратором; не повторяйте разрушительную очистку. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить результат и что делать, если проблема осталась
Успех — исходная операция завершается без ENOSPC, свободное место или inode достаточны именно в файловой системе Docker, приложения и данные доступны. Если нет, сохраните отчёт docker system df -v, путь DockerRootDir, показания df и тип окружения и передайте администратору.