了解 docker 差异

Understanding docker diff

我不明白 'docker diff' 的输出。详情见下文。 这是我的 Docker 版本:

$ docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64

我在 /var/jenkins_home 中有一个包含以下内容的 Jenkins 图像:

$ docker run -it --rm jenkins ls /var/jenkins_home
init.groovy.d

然后我启动 Jenkins 以填充 Jenkins 数据目录:

$ docker run --name app -d jenkins

Jenkins 启动后,我调用容器列出文件:

$ docker exec app ls /var/jenkins_home
Download metadata.log
hudson.model.UpdateCenter.xml
identity.key.enc
init.groovy.d
jobs
nodeMonitors.xml
nodes
plugins
secret.key
secret.key.not-so-secret
secrets
updates
userContent

好的!许多新文件。现在我想问一下 Docker 更改或创建了哪些文件:

$ docker diff app
C /tmp
A /tmp/hsperfdata_jenkins
A /tmp/hsperfdata_jenkins/1
A /tmp/jetty-0.0.0.0-8080-war--any-
A /tmp/jffi6440203232202129886.tmp
A /tmp/jna--1712433994
A /tmp/winstone874928832634242220.jar
C /var
C /var/log
C /var/log/copy_reference_file.log

那么为什么 'docker diff' 没有向我显示“/var/jenkins_home”中的新文件? 我做错了什么?

此致, - Morten Green Hermansen,Fanitas

如果您查看使位置 /var/jenkins_home 成为卷安装点的 Dockerfile for the Jenkins image, you will notice that there is a VOLUME 指令。

因此,写入 /var/jenkins_home 的任何数据都存储在卷安装点上,而不是存储在 容器文件系统 本身。

docker diff 命令只会显示 容器文件系统 上的差异,不会显示与卷挂载点内容相关的任何内容。

这同样适用于其他 docker 命令,例如 commit, cp and export