23.06.2025

No space left on device: убираем ошибку Docker

Ошибки, при настройке сервиса естественный процесс, с которым сталкивается каждый инженер в своей части рутинной работы. Одной из таких является Docker error : no space left on device, такая ошибка может ввести в ступор, ведь сейчас в Linux пространство делится по файловой системе достаточно гибко и вполне может не хватить места или закончиться квота.

Как решить ошибку Docker?

Данная проблема имеет две основные причины в корне, которые говорят, о том что:

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

df -H

Скриншот №1 — Место в разделе диска Linux

Обратите внимание, что папка /var/lib/docker, может находится, как на корневом разделе / логического диска , так и отдельно /var. В данном случае целевая папка находится на логическом разделе /dev/vda2. Если размер пространства вашего диска не позволяет  загрузить образ или хранить данные, то необходимо освободить пространство от ненужных файлов или же увеличить диск.

Очистка файлов Docker

Если у вас не было нужных проектов в Docker, то вы можете полностью очистить систему командой:

docker system prune -af

Docker пройдет по локальному репозиторию, хранилищам, контейнерам и удалит их, но перед этим убедитесь, что нет запущенных контейнеров командой:

docker stop $(docker ps -q)

Скриншот №2 — Очистка Docker файлов

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

docker image remove $(docker image ls -q)

Скриншот №3 — Очистка образов Docker

Для удаления других объектов используйте аналогичные подкоманды: volume, container, network и др. Если вам необходимо удалить конкретный файл, то сначала просмотрите список и удалите нужный:

docker image ls 
docker image remove [container-name]

Скриншот №4 — Удалить конкретный образ Docker

После проверьте доступное место на диске еще раз командой df -H, в случае если места до сих пор недостаточно перейдите к пункту ниже.

Расширение диска

Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:

Скриншот №5 — Создание сервера

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

Если вы используете для работы с дисками LVM, то рассмотрите отдельное подробное руководство.

Для увеличения логического раздела найдем список этих томов, обычно они привязаны к директориям дерева Linux:

df -H

Скриншот №6 — Место в разделе диска Linux

В данном случае это /dev/vda2, используем в заранее подготовленную утилиту для изменения разметки таблицы диска. Обратите внимание, что необходимо вместо /dev/vda2 – прописать свой раздел:

apt update && apt install parted && parted /dev/vda2

Команда print выведет список текущих логических разделов, запомните номер вашего раздела и введите команду:

resizepart [номер-раздела]

Введите новый размер диска, обратите внимание, не на сколько увеличится пространство, а именно, его новое значение! К примеру, 40GB.

Скриншот №7 — Изменить логический раздел

Далее увеличим размер файловой системы через аналогичную утилиту в одну команду!

resize2fs

Скриншот №8 — Изменить файловую систему

По умолчанию, все свободное пространство логического раздела будет занято файловой системой, после чего можно проверить уже известной утилитой освободившееся место:

df -H

Но что если пространства для контейнера Docker достаточно и ошибка прежняя? Скорее всего дело в выделенной квоте.

Увеличиваем квоту Docker

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

docker stop $(docker ls -q)

После чего удалим контейнеры командой:

docker container prune

Зададим новые параметры через опции. Обратите внимание, что необходимо осторожно выбирать значения для контейнеров, так как они могут израсходовать излишние ресурсы системы!

docker run -d --name my_container -m 512m --memory-swap 1g --cpus="2" nginx

Опция -m указывает на ограничение использования ОЗУ в 512 МБ, –memory-swap 1ГБ виртуальной памяти, а так же 2 ядра ЦП. Увеличив значения со стандартных, проблема будет решена!