我已经启动了一个 docker 容器并修改了一个文件。稍后,我想从 docker 主机检查此更改。现在我docker cp
用来导出文件,检查它,删除它。但是,如果我只想读取一个文件,这个多步复制-读取-删除过程似乎有点过头了。
有没有更好的方法来检查 docker 容器中的文件系统更改?
我需要比docker diff
显示更多的信息。
您可以在 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>
将要检查的文件存储在容器目录中/shared
或将 & ln 文件复制到/shared
并将所需文件符号链接到存储在/shared
.
cp /mydir/myfile /shared/myfile
ln -s -f /shared/myfile /mydir/myfile
然后您可以直接在/host_path/shared
.
注意:您不能符号链接特殊文件,如/etc/passwd
等/etc/hostname
。