从主机检查docker容器FS更改

时间:2014-02-16 23:51:28

标签: docker unionfs

我已经启动了一个docker容器并且我修改了一个文件。稍后我想从docker主机检查这个变化。现在我使用docker cp导出文件,检查它,删除它。但是,如果我只是想读取一个文件,那么这个多步骤的复制 - 读取 - 删除过程似乎就过度了。

有没有更好的方法来检查docker容器中的文件系统更改?

我需要的信息比docker diff显示的更多。

2 个答案:

答案 0 :(得分:2)

您可以在Docker数据目录中找到正在运行的容器的文件系统,通常为/var/lib/docker/。具体位置取决于使用的storage driver。在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

答案 1 :(得分:0)

这不是一般解决方案,但在特殊情况下,您可以使用已安装的卷:

使用volume启动容器:

sudo docker run -v /host_path/shared:/shared <container>

将要检查的文件存储在容器目录/shared中或复制&amp;将文件发送到/shared并使所需文件成为存储在/shared中的文件的符号链接。

cp /mydir/myfile /shared/myfile
ln -s -f /shared/myfile /mydir/myfile

然后您可以直接在/host_path/shared中检查这些文件。

注意:您无法对/etc/passwd/etc/hostname等特殊文件进行符号链接。