了解docker diff

Mor*_*sen 4 diff docker

我不明白'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
Run Code Online (Sandbox Code Playgroud)

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

$ docker run -it --rm jenkins ls /var/jenkins_home
init.groovy.d
Run Code Online (Sandbox Code Playgroud)

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

$ docker run --name app -d jenkins
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

好!很多新文件.现在我想问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
Run Code Online (Sandbox Code Playgroud)

那么为什么"docker diff"没有向我展示'/ var/jenkins_home'中的新文件?我究竟做错了什么?

此致, - Morten Green Hermansen,Fanitas

Tho*_*eil 5

如果您查看Jenkins映像Dockerfile,您会注意到有一个VOLUME指令使该位置/var/jenkins_home成为卷装入点.

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

搬运工的diff命令将只显示在不同的容器文件系统并不会显示任何相关的卷装入点的内容.

这同样适用于其他docker命令,例如commit,cpexport.