Docker помещает один слой поверх другого в свою лунную файловую систему, когда изменения сохраняются на изображении. Когда вы удаляете свой контейнер docker rmi -f CONTAINERID
, вы должны увидеть, что/var/lib/docker/container использует меньше места.
Изменения изображения сохраняются при его создании. Если вы просто используете изображение - запустите контейнер - измененные данные просто «удерживаются». Поэтому вы должны исследовать, что происходит в вашем контейнере. Особенно посмотрите, что создает ваш фантомный сервер в файловой системе. ncdu был бы хорошим инструментом для этого.
Начните с ncdu и сохраните файлы, созданные во вложенной папке файловой системы хостов. docker run -it -v FULLPATHATHOST:FULLPATHWITHINCONTAINER CONTAINERID
Тест
запустить простой контейнер, не содержащий ничего больше, чем зева (в моем случае альпийской)
docker run -it stk/alpine:base sh
На хосте пойти /var/lib/docker/aufs/diff/
и перечислить содержащие каталоги с ncdu. (Конечно, вы можете использовать любую другую программу, вы хотите, чтобы определить размеры diretories)
ncdu 1.10 ~ Use the arrow keys to navigate, press ? for help
--- /var/lib/docker/aufs/diff --------------------------------------------------
/..
286,4MiB [##########] /39f3e2ea0dfe17366b8cd7b0...bf3681b99a1081e33ad62a509f28
214,3MiB [####### ] /2de39307b9361cae12f0116e...d28056e4699b21b9a4d34f374461
207,7MiB [####### ] /92ec6d044cb3e39ae0050012...78d0591675f2231daafbf0877778
154,0MiB [##### ] /9f3806e6bedc8fb01929131b...e01aa1980aadba914fdd9d2f96ae
149,5MiB [##### ] /5f0ca2331640639507d85b83...693659438367311abb0c792b8a62
136,8MiB [#### ] /902b87aaaec929e805414868...1f529ad7f37ab300d4ef9f3a0dbf
136,2MiB [#### ] /222ba86561913d299deb9e0e...6b5f5ec117b01386a4156d092687
132,6MiB [#### ] /8b3a9a9eeaf8ed59f24f21a2...dfe8d033890a2fa44b445deb2e3c
128,5MiB [#### ] /72b3edf317a8d682466c1500...a5e2cad31c8305ed42c41cd61149
117,0MiB [#### ] /818e3763e72ef82b28b0552e...b9f163dc601d266e94e46fd26bb0
57,4MiB [## ] /eeffdfafed9f60771b5bf87a...e8bbd16b572f77899c8e689d174d
56,1MiB [# ] /6976ce3ed5fab37382d90467...37578332417ffcf35a1d499eba52
51,3MiB [# ] /a5a6e0549d247f1c8b81a350...c5071f46d17afe2f8988817360b3
Total disk usage: 2,7GiB Apparent size: 2,7GiB Items: 168658
Внутри контейнера выполнить что-то вроде
tr -dc A-Za-z0-9 </dev/urandom | head -c 409600000 > a.txt && ls a.txt -all -h
, который будет создавать файл со случайными данными, называемых a.txt
I Choosed размер 409600000
быть больше, чем 286,4MiB - самая большая папка в /var/lib/docker/aufs/diff/
- так что ncdu должен показать его на верхней
ncdu 1.10 ~ Use the arrow keys to navigate, press ? for help
--- /var/lib/docker/aufs/diff --------------------------------------------------
/..
390,6MiB [##########] /0720a07653a57d938c861cf3...e61c81c29f12289759f0560aa38f
286,4MiB [####### ] /39f3e2ea0dfe17366b8cd7b0...bf3681b99a1081e33ad62a509f28
214,3MiB [##### ] /2de39307b9361cae12f0116e...d28056e4699b21b9a4d34f374461
207,7MiB [##### ] /92ec6d044cb3e39ae0050012...78d0591675f2231daafbf0877778
154,0MiB [### ] /9f3806e6bedc8fb01929131b...e01aa1980aadba914fdd9d2f96ae
149,5MiB [### ] /5f0ca2331640639507d85b83...693659438367311abb0c792b8a62
136,8MiB [### ] /902b87aaaec929e805414868...1f529ad7f37ab300d4ef9f3a0dbf
136,2MiB [### ] /222ba86561913d299deb9e0e...6b5f5ec117b01386a4156d092687
132,6MiB [### ] /8b3a9a9eeaf8ed59f24f21a2...dfe8d033890a2fa44b445deb2e3c
128,5MiB [### ] /72b3edf317a8d682466c1500...a5e2cad31c8305ed42c41cd61149
117,0MiB [## ] /818e3763e72ef82b28b0552e...b9f163dc601d266e94e46fd26bb0
57,4MiB [# ] /eeffdfafed9f60771b5bf87a...e8bbd16b572f77899c8e689d174d
56,1MiB [# ] /6976ce3ed5fab37382d90467...37578332417ffcf35a1d499eba52
Total disk usage: 3,0GiB Apparent size: 3,0GiB Items: 168678
Теперь я знаю, что это каталог, начинающийся с 0720a07653a57d9...
, что я должен искать. Зайдите в него и список содержимого
[email protected]:/var/lib/docker/aufs/diff# cd 0720a07653a57d938c861cf32f4bee87fa4be61c81c29f12289759f0560aa38f
[email protected]:/var/lib/docker/aufs/diff/0720a07653a57d938c861cf32f4bee87fa4be61c81c29f12289759f0560aa38f# ls -all -h
insgesamt 391M
drwxr-xr-x 5 root root 4,0K Feb 23 10:55 .
drwxr-xr-x 674 root root 80K Feb 23 10:55 ..
-rw-r--r-- 1 root root 391M Feb 23 10:57 a.txt
drwx------ 2 root root 4,0K Feb 23 10:55 root
-r--r--r-- 1 root root 0 Feb 23 10:55 .wh..wh.aufs
drwx------ 2 root root 4,0K Feb 23 10:55 .wh..wh.orph
drwx------ 2 root root 4,0K Feb 23 10:55 .wh..wh.plnk
Как вы можете видеть, есть файл a.txt
в списке.
Теперь запустите процедуру, создайте случайное создание файла и отредактируйте ncdu (просто нажмите r
в ncdu.)
ncdu
должен показать вам, а также ls
должен сделать, чтобы размер каталога не изменился. Таким образом, данные в докере fs просто перезаписываются. Если вы выберете размер смазки, он станет меньше.
Так как это может вам помочь? Как я показал выше, для изменения данных в файлах нет роста файлов. И вы можете узнать, что каталог ведьм содержит вашу файловую систему и видит обычную филеструктуру добавленных/измененных файлов в вашем контейнере.
Надеюсь, что это поможет найти файлы в вашем контейнере.
Если вы выходите из своего контейнера и перезапускаете его той же командой снова, создается новый экземпляр, при этом создается собственный слой fs.
Вы можете найти идентификаторы ваших остановившихся контейнеров используют
docker ps -a | grep Exited | grep stk/alpine:base | awk '{print $1 }'
Чтобы увидеть то, что находится перед тем deleteing ...
docker ps -a | grep Exited | grep stk/alpine:base
7b7d3f6e857a stk/alpine:base "sh" 22 minutes ago Exited (0) 2 minutes ago gigantic_swartz
2f51ea988a28 stk/alpine:base "sh" 23 minutes ago Exited (0) 22 minutes ago cranky_euler
4bfafbb034fe stk/alpine:base "sh" 34 minutes ago Exited (0) 25 minutes ago sick_williams
80cd5687fcd7 stk/alpine:base "sh" 44 minutes ago Exited (137) 37 minutes ago determined_panini
a2179a8dd543 stk/alpine:base "sh" 58 minutes ago Exited (130) 44 minutes ago agitated_shockley
8596cd310292 stk/alpine:base "sh" 3 days ago Exited (137) 3 days ago dreamy_murdock
33db61a7830b stk/alpine:base "sh" 3 days ago Exited (0) 3 days ago desperate_hodgkin
2f96c15dc8a1 stk/alpine:base "sh" 2 weeks ago Exited (0) 2 weeks ago determined_babbage
Присоединить | xargs -r docker rm
удалить их
Одна линия раствор
docker ps -a | grep Exited | grep stk/alpine:base | awk '{print $1 }' | xargs -r docker rm
Docker проверит, что изображения не используются другими изображениями и жалуются, если они не могут быть удалены, если вы делаете docker rmi
. Но в этом случае вы хотите, чтобы контейнеры, а не изображения, были удалены. Поэтому использовать rm
вместо rmi
(Я обновил ответ)
Наслаждайтесь
Спасибо. Да, дисковое пространство снова освобождается, когда я удаляю контейнеры. Проблема в том, что я не могу найти файлы, созданные в моем контейнере. Я использую 'sudo docker exec -it my-service-4 du -h -d1 -c /', чтобы исследовать использование диска в моем запущенном контейнере. Это использование диска остается постоянным в течение всего времени, хотя контейнер в/var/lib/docker/контейнерах все же увеличивается. – Thomas