
Версии окружения:
macos 10.14.4
docker server 18.09.2
docker desktop Version 2.0.0.3 (31259)
Столкнулся с no space left on device
ошибкой внутри контейнера и не могу определить, откуда взялось переполнение.
Хуже всего то, что я не могу определить фактический размер контейнера с точки зрения системы материнского хоста (инструменты info/inpsect/system df), на самом деле статистика с docker и материнских хостов не совпадает :/
У меня есть контейнер со следующей статистикой df внутри:
root@31a71014ad95:/usr/local/app# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 21G 40G 34% /
tmpfs 64M 0 64M 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
osxfs 234G 182G 48G 80% /shared_from_host
/dev/sda1 63G 21G 40G 34% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 2.0G 0 2.0G 0% /proc/acpi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
( shared_from_host
- общий том для взаимодействия с материнским хостом)
Стоит отметить, что я читал об общем размере файла изображения на Mac, он кажется приемлемым и далеким от размера по умолчанию в 64 ГБ:
ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r--@ 1 coin staff 21G May 26 22:25 /Users/usss/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Контейнер Docker определенно содержит большой подкаталог:
root@31a71014ad95:/usr/local/app# du -hs ./*|grep CRISP
12G ./CRISPRCasFinder
Я видел ps -s
, inspect
, system df
как рекомендуемые способы оценки статистики использования диска контейнера, но не имел успеха. Все они показывают нереальные значения. Так что, похоже, я использую эти инструменты неправильно, я интерпретирую цифры неправильным образом.
Статистика материнского хоста выглядит так:
docker inspect
даетhttps://pastebin.com/53vLji1pdocker ps -s
дает
%docker container ps -sa
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
31a71014ad95 nvm:nvm_tag "/bin/bash" 6 hours ago Exited (137) 23 minutes ago cr 3.52GB (virtual 5.44GB)
<...>
docker system df
дает
%docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 8 6 5.52GB 3.021GB (54%)
Containers 6 0 3.541GB 3.541GB (100%)
Local Volumes 33 6 2.751GB 2.381GB (86%)
Build Cache 0 0 0B 0B
Ни одно из этих значений не похоже на использование контейнера с du (показано выше). Это те значения, на которые мне следует обратить внимание?
Самый полезный и подробный пример, который я нашел, этоhttps://www.projectatomic.io/blog/2016/03/daemon_option_basedevicesize/
Но, похоже, в моей текущей версии Docker вывод больше не содержит таких полей, которые автор использует для иллюстраций - ни "базовый размер устройства", ни "DeviceSize"
Итак, вопросы:
как я могу увидеть реальную статистику использования контейнера, чтобы затем применить некоторые настройки?
где находится конфигурация максимального размера диска контейнера?
Спасибо!
ОБНОВЛЯТЬ
Я попытался перезапустить приложение Docker, и все закончилось фатальной ошибкой пространства -https://pastebin.com/twM3qN8N
Так что docker вообще не запускается в данный момент. Хорошо... Я также нашел нечто очень похожее в качестве проблемы на gh -https://github.com/docker/for-mac/issues/3529
Я видел проблемы с misbehave, где удаление файла qcow2 было исправлением, но всегда была проблема с пространством, где used
и configured
размеры были близки, и проблема была в изменении размера. Но, похоже, эта проблема похожа на мою, потому что размер файла автора проблемы qcow2 кажется достаточно большим.
Я вижу, что временным решением является очистка всех данных, но надеюсь найти альтернативу или хотя бы какое-то объяснение показателей использования диска, прежде чем приступать к полной очистке.
ОБНОВЛЕНИЕ 2
частичное решение без qcow ясно, но нет понимания
Продолжал читать всевозможные статьи и после прочтенияhttp://phutchins.com/blog/2017/01/04/fixing-docker-no-space-left-on-device/
И заметил это странное ограничение в 20 Гб, установленное по умолчанию в 2017 году. И подумал. Давайте представим, что несмотря на то, что df -h
внутри контейнера и docker desktop
настройки пользовательского интерфейса сообщают о 64 Гб, у меня все еще есть ограничение в 20 Гб. Выглядит возможным?
И установил qemu и добавил +5Gb к образу как написано в статье:
%qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +5G
И вуаля все запустилось и заработало. Я все еще вижу тот же размер файла qemu:
%ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r--@ 1 usss staff 21G May 27 00:46 /Users/usss/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
но использование с точки зрения контейнера немного изменилось
root@31a71014ad95:/usr/local/app# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 68G 21G 45G 32% /
tmpfs 64M 0 64M 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
osxfs 234G 178G 55G 77% /shared_from_host
/dev/sda1 68G 21G 45G 32% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 2.0G 0 2.0G 0% /proc/acpi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
теперь доступно 45 Гб (выше было 40 Гб).
Но теперь хотя бы все работает, но совершенно нет понимания, где shadowed
прячется потребление.
решение1
Дисковое пространство в настольных версиях docker может быть ограничено диском, который вы предоставляете встроенной docker VM. Внутри этой VM находятся образы, контейнеры, именованные тома и любые другие файлы, не смонтированные явно в VM из внешнего источника (например, каталог /Users в MacOS). Вы можете настроить параметры этой VM из настроек docker:
Кредит изображения: документация Docker
Более подробную информацию можно получить по адресу:https://docs.docker.com/docker-for-mac/space/
Важное замечание по использованию диска: вы можете исчерпать байты на диске, а также можете исчерпать иноды. Оба варианта дадут одну и ту же ошибку. Используйте опцию df -i
для проверки indo, например:
df -h # to see disk free
df -hi # to see inodes free
Если ошибка произошла во время работы контейнера, а затем контейнер был удален, возможно, удаление контейнера освободило место на диске.