Проверьте изменения FS док-контейнера с хоста
Я запустил Docker-контейнер и изменил файл. В какой-то момент позже я бы хотел проверить это изменение на хосте докера. Сейчас пользуюсь docker cp
чтобы экспортировать файл, проверить его, удалить его. Но этот многоэтапный процесс копирования-чтения-удаления кажется слишком сложным, если я просто хочу прочитать файл.
Есть ли лучший способ проверить изменения файловой системы в контейнере Docker?
Мне нужно больше информации, чем docker diff
показывает.
2 ответа
Вы можете найти файловую систему работающего контейнера в каталоге данных Docker, обычно /var/lib/docker/
, Конкретное расположение зависит от используемого драйвера хранилища. В случае AUFS расположение: `/var/lib/docker/aufs/mnt/${CONTAINER_ID}/.
$ HELLO_WORLD=$(docker run -d ubuntu:12.04 /bin/sh -c "while true; do echo Hello world; sleep 1; done")
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2524e196adf0 ubuntu:12.04 /bin/sh -c while tru 4 seconds ago Up 3 seconds naughty_brown
$ echo $HELLO_WORLD
2524e196adf0b985e84a22503d5fd1f2110c6a0cf175f12496f11f0043e799fa
$ sudo ls /var/lib/docker/aufs/mnt/${HELLO_WORLD}/
bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var
Это не общее решение, но в особых случаях вы можете использовать подключенные тома:
Начать контейнер с объема:
sudo docker run -v /host_path/shared:/shared <container>
Храните файлы, которые вы хотите проверить, в контейнере dir /shared
или скопируйте файлы в /shared
и сделать необходимые файлы символическими ссылками на файлы, хранящиеся в /shared
,
cp /mydir/myfile /shared/myfile
ln -s -f /shared/myfile /mydir/myfile
Затем вы можете проверить эти файлы непосредственно в /host_path/shared
,
Примечание. Вы не можете использовать символические ссылки для специальных файлов, таких как /etc/passwd
, /etc/hostname
и т.п.