Docker/OSX не может найти причину ошибки «на устройстве не осталось места»

Docker/OSX не может найти причину ошибки «на устройстве не осталось места»

Версии окружения:

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как рекомендуемые способы оценки статистики использования диска контейнера, но не имел успеха. Все они показывают нереальные значения. Так что, похоже, я использую эти инструменты неправильно, я интерпретирую цифры неправильным образом.

Статистика материнского хоста выглядит так:

  1. docker inspectдаетhttps://pastebin.com/53vLji1p

  2. docker 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)
<...>
  1. 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"

Итак, вопросы:

  1. как я могу увидеть реальную статистику использования контейнера, чтобы затем применить некоторые настройки?

  2. где находится конфигурация максимального размера диска контейнера?

Спасибо!

ОБНОВЛЯТЬ

Я попытался перезапустить приложение 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 для MacOS

Кредит изображения: документация Docker

Более подробную информацию можно получить по адресу:https://docs.docker.com/docker-for-mac/space/


Важное замечание по использованию диска: вы можете исчерпать байты на диске, а также можете исчерпать иноды. Оба варианта дадут одну и ту же ошибку. Используйте опцию df -iдля проверки indo, например:

df -h # to see disk free
df -hi # to see inodes free

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

Связанный контент