Ошибки, при настройке сервиса естественный процесс, с которым сталкивается каждый инженер в своей части рутинной работы. Одной из таких является Docker error : no space left on device, такая ошибка может ввести в ступор, ведь сейчас в Linux пространство делится по файловой системе достаточно гибко и вполне может не хватить места или закончиться квота.
Как решить ошибку Docker?
Данная проблема имеет две основные причины в корне, которые говорят, о том что:
- место в разделе диска по пути /var/lib/docker заполнено и требует увеличение пространства. Такая проблема возникает из-за большого числа места занимаемого объектами Docker, а так же локальным репозиторием.
- закончилось место по квоте Docker – это так же одна из частых причин, когда в конфигурации указан лимит памяти, который может использовать Docker. Данная функция полезна во избежании заполнения избыточного дискового пространства.
Чтобы удостовериться в достаточном или недостаточном месте на диске используйте команду, которая отобразит список файловых систем и места занимаемого ими:
Обратите внимание, что папка /var/lib/docker, может находится, как на корневом разделе / логического диска , так и отдельно /var. В данном случае целевая папка находится на логическом разделе /dev/vda2. Если размер пространства вашего диска не позволяет загрузить образ или хранить данные, то необходимо освободить пространство от ненужных файлов или же увеличить диск.
Очистка файлов Docker
Если у вас не было нужных проектов в Docker, то вы можете полностью очистить систему командой:
Docker пройдет по локальному репозиторию, хранилищам, контейнерам и удалит их, но перед этим убедитесь, что нет запущенных контейнеров командой:
Для того, чтобы точечно удалить файлы используйте подкоманды, так например очистка образов в локальном репозитории будет произведена командой:
Для удаления других объектов используйте аналогичные подкоманды: volume, container, network и др. Если вам необходимо удалить конкретный файл, то сначала просмотрите список и удалите нужный:
После проверьте доступное место на диске еще раз командой df -H, в случае если места до сих пор недостаточно перейдите к пункту ниже.
Расширение диска
Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:
Увеличьте дисковое пространство устройства путем расширения виртуального хранилища гипервизора или выберите иной диск для машины. После чего пространство будет увеличено, однако, необходимо его распределить для логических томов и файловой системы.
Для увеличения логического раздела найдем список этих томов, обычно они привязаны к директориям дерева Linux:
В данном случае это /dev/vda2, используем в заранее подготовленную утилиту для изменения разметки таблицы диска. Обратите внимание, что необходимо вместо /dev/vda2 – прописать свой раздел:
Команда print выведет список текущих логических разделов, запомните номер вашего раздела и введите команду:
Введите новый размер диска, обратите внимание, не на сколько увеличится пространство, а именно, его новое значение! К примеру, 40GB.
Далее увеличим размер файловой системы через аналогичную утилиту в одну команду!
По умолчанию, все свободное пространство логического раздела будет занято файловой системой, после чего можно проверить уже известной утилитой освободившееся место:
Но что если пространства для контейнера Docker достаточно и ошибка прежняя? Скорее всего дело в выделенной квоте.
Увеличиваем квоту Docker
Решение в пару строк, которое позволит переопределить значение переменных и задать большее пространство для Docker. Для явного указания ресурсов необходимо перезапустить контейнеры с новыми параметрами. Остановим все текущие задачи:
После чего удалим контейнеры командой:
Зададим новые параметры через опции. Обратите внимание, что необходимо осторожно выбирать значения для контейнеров, так как они могут израсходовать излишние ресурсы системы!
Опция -m указывает на ограничение использования ОЗУ в 512 МБ, –memory-swap 1ГБ виртуальной памяти, а так же 2 ядра ЦП. Увеличив значения со стандартных, проблема будет решена!