У меня есть установочный докер, и я использовал совершенно другое блочное устройство для хранения системных данных докера:
[root@blink1 /]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
other_args="-H tcp://0.0.0.0:9367 -H unix:///var/run/docker.sock -g /disk1/docker"
Обратите внимание, что /disk/1
используется совершенно другой жесткий диск/dev/xvdi
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 5.1G 2.6G 67% /
devtmpfs 1.9G 108K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvdi 20G 5.3G 15G 27% /disk1
/dev/dm-1 9.8G 1.7G 7.6G 18% /disk1/docker/devicemapper/mnt/bb6c540bae25aaf01aedf56ff61ffed8c6ae41aa9bd06122d440c6053e3486bf
/dev/dm-2 9.8G 1.7G 7.7G 18% /disk1/docker/devicemapper/mnt/c85f756c59a5e1d260c3cdb473f3f4d9e55ac568967abe190eeaf9c4087afeac
Проблема в том, что когда я продолжаю загружать образы докеров и запускать контейнеры докеров, кажется, что другой жесткий диск /dev/xvda1
также израсходован.
Я могу проверить эту проблему, удалив некоторые изображения докеров. После того, как я удалил некоторые образы докеров, /dev/xvda1
у меня появилось еще немного места.
Я что-то упускаю?
Моя версия докера:
[root@blink1 /]# docker info
Containers: 2
Images: 42
Storage Driver: devicemapper
Pool Name: docker-202:1-275421-pool
Pool Blocksize: 64 Kb
Data file: /disk1/docker/devicemapper/devicemapper/data
Metadata file: /disk1/docker/devicemapper/devicemapper/metadata
Data Space Used: 3054.4 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 4.7 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.14.20-20.44.amzn1.x86_64
Operating System: Amazon Linux AMI 2014.09
docker
diskspace
device-mapper
ming.kernel
источник
источник
fdisk -l
Ответы:
Это проблема ядра с devicemapper, которая влияет на семейство ОС RedHat (RedHat, Fedora, CentOS и Amazon Linux). Удаленные контейнеры не освобождают отображаемое дисковое пространство. Это означает, что в уязвимых ОС при запуске и перезапуске контейнеров у вас будет постепенно не хватать места.
Проект Docker знает об этом, и ядро предположительно исправлено в апстриме ( https://github.com/docker/docker/issues/3182 ).
Своего рода обходной путь - предоставить Docker собственный том для записи ( «Когда Docker съедает ваше дисковое пространство» ). На самом деле это не мешает ему поедать пространство, а просто отключать другие части вашей системы после этого.
Мое решение заключалось в том, чтобы удалить докер, затем удалить все его файлы, а затем переустановить:
Это вернуло мое пространство, но это не сильно отличается от простого запуска экземпляра на замену. Я не нашел лучшего решения.
источник
/var/lib/docker
, что удалит все ваши изображения и контейнеры. Вы полностью сбрасываете Docker, поэтому не ожидайте, что сможете сохранить все свои вещи.Мне не подходит удаление всего / var / lib / docker. Это более безопасные способы:
Решение 1:
Следующие команды из этой проблемы освобождают для меня место, и это намного безопаснее, чем удаление / var / lib / docker или для Windows проверьте расположение образа диска здесь .
До:
Пример вывода:
Команда в новых версиях Docker, например 17.x +
Он покажет вам предупреждение о том, что он удалит все остановленные контейнеры, сети, изображения и кеш сборки. Как правило, это безопасно удалить. (В следующий раз, когда вы запустите контейнер, он может извлечь из реестра Docker)
Пример вывода:
Затем вы можете снова запустить информацию о докере, чтобы увидеть, что было очищено.
Решение 2:
Наряду с этим убедитесь, что ваши программы внутри контейнера докеров не записывают много / огромных файлов в файловую систему.
Проверьте размер используемого пространства запущенным процессом докера
или для всех контейнеров, даже вышедших
Затем вы можете удалить контейнер / ы с нарушением
Найдите возможного виновника, который может использовать гигабайты космоса
В моем случае программа записывала гига временных файлов.
( Натаниэль Вайсброт упомянул в принятом ответе на этот вопрос, и я получил некоторую информацию по этому вопросу)
ИЛИ ЖЕ
Команды в более старых версиях Docker, например 1.13.x (запускаются от имени пользователя root, а не sudo):
После :
источник
docker system prune --force
это определенно самый безопасный вариант, который я когда-либо видел. На моей машине не хватало места. Обрезал, и теперь у меня 50 ГБ свободного места ... Хотел бы я знать об этом раньшеprune
бесполезно, потому что Docker не видит ничего, что можно было бы обрезать)Переместите
/var/lib/docker
каталог.Предполагая, что в
/data
каталоге достаточно места, если нет, замените тот, который есть,Таким образом, вам не нужно перенастраивать докер.
источник
Была такая же проблема. В моем сценарии в моем vbox не хватало места для хранения. После расследования выяснилось, что мои локальные тома докера съедают 30гб. Хост Ubuntu 16.04.
Чтобы узнать твое.
Это освобождает дисковое пространство от неиспользуемых локальных томов. По моему сценарию освободилось 20 ГБ дискового пространства. Убедитесь, что контейнеры, которые вы хотите сохранить, запущены, прежде чем делать это, если вы хотите сохранить их, поскольку это удаляет все остановленные контейнеры.
источник
У меня была аналогичная проблема, и я думаю, что это происходит, когда на диске недостаточно места для всех ваших образов докеров. У меня было 6 ГБ зарезервировано для образов докеров, которых в моем случае оказалось недостаточно. В любом случае, я удалил все изображения и контейнеры, но диск все равно выглядел заполненным. Большая часть пространства использовалась / var / lib / docker / devicemapper и / var / lib / docker / tmp.
Эта команда у меня не сработала:
Сначала остановил докер-сервис:
Затем удалил / var / lib / docker:
Затем я сделал то, что кто-то предложил здесь, в https://github.com/docker/docker/issues/18867#issuecomment-232301073
Удалить существующий экземпляр метаданных докеров rm -rf / var / lib / docker
sudo rm -rf / var / lib / докер
Передайте следующие параметры демону docker: -s devicemapper --storage-opt dm.fs = xfs --storage-opt dm.mountopt = discard
Запустите демон докера.
На последних двух шагах я бегу:
источник
Docker prune по умолчанию не удаляет тома,
вы можете попробовать что-то вроде
источник
docker system prune --all --volumes
Как упоминалось в проблеме № 18867 - Удаление данных в контейнере devicemapper не может освободить используемое пространство с Github.com.
Попробуйте выполнить следующую команду:
Он использует этот
fstrim
инструмент для обрезки диска с тонким предоставлением devicemapper.источник
возможно вы можете попробовать
docker system prune
удалить все изображения, которые не важныисточник
Для тех, кто столкнулся с этой проблемой в MacOS, решение, которое сработало для меня, заключалось в поиске файла Docker.raw, который Docker использует для резервирования логического пространства на хосте, а затем его удаления. Если у вас есть Docker Desktop, вы можете:
Preferences -> Resources -> Advanced
а затем загляните подDisk image location
вкладку.Перейдите в эту папку в терминале и просто удалите
Docker.raw
файл ($ rm -rf Docker.raw
)Важное примечание . Делайте это только в том случае, если вам не нужны какие-либо существующие изображения или тома.
источник
Да, Docker использует папку / var / lib / docker для хранения слоев. Есть способы освободить место и переместить хранилище в другой каталог.
Вы можете смонтировать большее дисковое пространство и переместить содержимое / var / lib / docker в новое место монтирования и создать символьную ссылку.
Есть подробное объяснение того, как выполнить вышеуказанную задачу.
http://www.scmtechblog.net/2016/06/clean-up-docker-images-from-local-to.html
Вы также можете удалить промежуточные слои.
https://github.com/vishalvsh1/docker-image-cleanup
источник