Почему образ docker съедает мое дисковое пространство, которое не используется docker
у меня есть докер настройки, и я использовал совершенно другое блочное устройство для хранения системных данных докера:
[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
проблема в том, что когда я продолжаю загружать изображения docker и запускать контейнеры docker, кажется, что другой жесткий диск /dev/xvda1
также используется.
Я могу проверить эту проблему путем удаления некоторых docker images. После того, как я удалил некоторые изображения docker,/dev/xvda1
теперь есть дополнительное пространство.
Я что-то пропустила?
моя версия docker:
[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
6 ответов
это проблема ядра с devicemapper, которая влияет на семейство RedHat ОС (RedHat, Fedora, CentOS и Amazon Linux). Удаленные контейнеры не освобождают место на диске. Это означает, что при запуске и перезапуске контейнеров в затронутых ОС будет медленно заканчиваться пространство.
проект Docker знает об этом, и ядро предположительно зафиксировано в upstream (https://github.com/docker/docker/issues/3182).
обойти роде чтобы дать докеру собственный том для записи ( "когда Докер съедает дисковое пространство"). Это на самом деле не остановить его от еды, просто от других частей системы после этого.
моим решением было удалить docker, затем удалить все его файлы, а затем переустановить:
sudo yum remove docker
sudo rm -rf /var/lib/docker
sudo yum install docker
это вернуло мое пространство, но это не сильно отличается от запуска экземпляра замены. Я не нашел лучшего решения.
удаление всего моего/var/lib / docker не в порядке для меня. Это более безопасные способы:
Решение 1:
следующие команды из проблемы очищают пространство для меня, и это намного безопаснее, чем удаление /var/lib / docker
перед:
> docker info
Metadata file:
Data Space Used: 53.38 GB
Data Space Total: 53.39 GB
Data Space Available: 8.389 MB
Metadata Space Used: 6.234 MB
Metadata Space Total: 54.53 MB
Metadata Space Available: 48.29 MB
команда в более новых версиях Docker, например 17.икс +
> docker system prune -a
(он покажет "общее исправленное пространство")
команды в старых версиях Docker, например 1.13.x (Запуск от имени root не sudo):
# Delete 'exited' containers
docker rm -v $(docker ps -a -q -f status=exited)
# Delete 'dangling' images (If there are no images you will get a docker: "rmi" requires a minimum of 1 argument)
docker rmi $(docker images -f "dangling=true" -q)
# Delete 'dangling' volumes (If there are no images you will get a docker: "volume rm" requires a minimum of 1 argument)
docker volume rm $(docker volume ls -qf dangling=true)
после :
> docker info
Metadata file:
Data Space Used: 1.43 GB
Data Space Total: 53.39 GB
Data Space Available: 51.96 GB
Metadata Space Used: 577.5 kB
Metadata Space Total: 54.53 MB
Metadata Space Available: 53.95 MB
решение 2:
наряду с этим убедитесь, что ваши программы внутри контейнера docker не пишут много / огромных файлов в файл система.
проверьте размер использования пространства запущенного процесса docker
docker ps -s #may take minutes to return
или для всех контейнеров, даже вышел
docker ps -as #may take minutes to return
затем вы можете удалить оскорбительный контейнер/s
docker rm <CONTAINER ID>
найдите возможного виновника, который может использовать концерты пространства
docker exec -it <CONTAINER ID> "/bin/sh"
du -h
в моем случае программа пишет гигов временных файлов.
(Натаниэль Waisbrot упомянутый в принятом ответе это вопрос и я получил некоторую информацию от вопроса)
у меня была аналогичная проблема, и я думаю, что это происходит, когда у вас недостаточно места на диске для всех ваших изображений docker. У меня было 6GB зарезервировано для изображений docker, которых оказалось недостаточно в моем случае. Во всяком случае, я удалил каждое изображение и контейнер, и все еще диск выглядел полным. Большая часть пространства использовалась /var/lib/docker /devicemapper и/var/lib/docker / tmp.
эта команда не работает для меня:
# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/
во-первых, я перестал docker service:
sudo service docker stop
затем я удалил /var/lib / docker:
затем я сделал то, что кто-то предложил здесь в https://github.com/docker/docker/issues/18867#issuecomment-232301073
-
удалить существующий экземпляр метаданных docker rm-rf/var/lib / docker
sudo rm-rf/var/lib / docker
передайте следующие параметры демону docker: - s devicemapper --storage-opt dm.ФС=файловую систему XFS -- хранение-opt dm.mountopt=отбросить
запустить демон docker.
за последние два шага, я бегу:
sudo dockerd -s devicemapper --storage-opt dm.fs=xfs --storage-opt dm.mountopt=discard
Как упоминалось в выпуске #18867 - удаление данных в контейнере devicemapper не может освободить используемое пространство от Github.com
попробуйте выполнить следующую команду:
# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/
использует fstrim
инструмент для обрезки тонко подготовленного диска devicemapper.
перемещение /var/llib / docker.
предполагая, что / корневой каталог имеет достаточно места, если нет, замените тот, который делает,
sudo systemctl stop docker
mv /usr/lib/docker /root
ln -s /root/docker /var/lib/docker
systemctl start docker
таким образом, вам не нужно перенастраивать docker.
да, Docker использует папку /var/lib/docker для хранения слоев. Есть способы освободить место и переместить хранилище в другой каталог.
вы можете смонтировать большее дисковое пространство и переместить содержимое /var/lib/docker в новое место монтирования и сделать ссылку sym.
существует подробное объяснение того, как сделать выше задачу.
http://www.scmtechblog.net/2016/06/clean-up-docker-images-from-local-to.html
вы можете удалите и промежуточные слои.