Почему образ 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

вы можете удалите и промежуточные слои.

https://github.com/vishalvsh1/docker-image-cleanup