#docker #volume
#докер #объем
Вопрос:
Если я запускаю контейнер без указанного тома, где хранится системный файл контейнера?
docker run -it c_name i_name:tag
когда я запускаю контейнер без тома, создается только папка контейнера /var/lib/docker/container
, но если я создаю большой файл в файловой системе контейнера, где он хранится на хосте? Потому что я хочу знать, не вызовет ли это проблему с размером занимаемого диска.
Комментарии:
1. Docker по умолчанию хранит содержимое в подкаталогах
/var/lib/docker
. На компьютере Mac или Windows эта файловая система находится внутри виртуальной машины Linux.2.
dock info
а потом искатьDocker Root Dir
. Илиdocker inspect CONTAINER_NAME
3. @larsks когда я запускаю контейнер без тома, создается только папка контейнера
/var/lib/docker/container
, но если я создаю большой файл в файловой системе контейнера, где он хранится на хосте? Потому что я хочу знать, не вызовет ли это проблему с занятием диска.
Ответ №1:
Хранилище контейнера состоит из разных слоев, разные слои в конечном итоге образуют объединенный слой.
Давайте проведем небольшой эксперимент дальше:
1. Запустите контейнер и настройте новый файл:
# docker run -idt --name trial debian /bin/bash
# docker exec -it trial /bin/bash
root@e6c2b6336753:/# echo "helloworld" > test.txt
root@e6c2b6336753:/# cat test.txt
helloworld
2. Найдите идентификатор объединенного уровня хранилища:
# docker inspect --format=" {{ .GraphDriver.Data.MergedDir }} " trial
/var/lib/docker/overlay2/8f2e14d33448cb83e581b2950a69faa827a012904051c845abf550273196f90f/merged
Здесь 8f2e14d33448cb83e581b2950a69faa827a012904051c845abf550273196f90f
указан идентификатор слоя.
3. Проверьте слой:
# cd /var/lib/docker/overlay2/8f2e14d33448cb83e581b2950a69faa827a012904051c845abf550273196f90f/merged
root@shlava:/var/lib/docker/overlay2/8f2e14d33448cb83e581b2950a69faa827a012904051c845abf550273196f90f/merged# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test.txt tmp usr var
root@shlava:/var/lib/docker/overlay2/8f2e14d33448cb83e581b2950a69faa827a012904051c845abf550273196f90f/merged# cat test.txt
helloworld
Итак, в качестве вывода, как вы могли видеть выше, содержимое файловой системы можно найти в /var/lib/docker/overlay2/
с идентификатором слоя в качестве папки, вы можете проверить диск там.
Комментарии:
1. У меня новый вопрос: как элегантно очистить этот
merged
слой?2. В docker более сложное поведение для overlay fs, поэтому, если вы уже нашли большой файл с помощью вышеуказанного метода, просто
exec
войдите в контейнер, чтобы удалить этот большой файл. Рекомендуется не удалять файловую систему напрямую/var/lib/docker/overlay2/
. Если вы этого не хотите, я не знаю ни одного элегантного способа сбросить изменения в контейнере, вы можете задать новый вопрос ребятам на удачу.3. Я обнаружил
merged
, что каталог неправильно монтируется при использовании docker-compose (с другим сервисом), я не могу его найтиtest.txt
.