docker diff 是 Docker 内置命令,用于查看容器运行期间文件系统变化,输出以 A(新增)、C(修改)、D(删除)标识变更类型,可结合 grep 筛选 /tmp 等临时目录,但仅反映可写层变化,不追踪 tmpfs 挂载或内存中未落盘文件。

DockerDiff 本身并不是一个独立的 Docker 命令或官方工具,而是指利用 docker diff 这个内置子命令来查看容器运行期间文件系统的变化。它能清晰列出容器启动后新增、修改或删除的文件和目录——包括你关心的临时文件(如 /tmp 下的缓存、日志、上传文件等)。
理解 docker diff 的输出含义
执行 docker diff <container-id-or-name></container-id-or-name> 后,结果每行以一个字母开头,表示变更类型:
- A:Added(新增文件或目录,最可能对应你生成的临时文件)
- C:Changed(文件内容或元数据被修改,比如日志追加、配置重写)
- D:Deleted(文件或目录被删除)
例如:A /tmp/upload_abc123.zip 表示该临时文件是在容器运行后创建的;C /var/log/app.log 表示日志被追加或轮转过。
快速筛选临时文件路径
多数临时文件集中在标准临时目录中,可结合 grep 快速过滤:
docker diff myapp | grep "^A" | grep -E "/tmp/|/var/tmp/|/run/"- 若应用自定义临时目录(如 Java 应用用
java.io.tmpdir),需结合镜像文档或进入容器确认:docker exec myapp printenv JAVA_TMPDIR - 注意:某些框架(如 Python 的
tempfile)可能在/tmp下创建带随机名的子目录,这类 A 行也应纳入关注
配合容器生命周期观察临时文件变化
临时文件往往随操作动态产生,建议按步骤对比:
- 启动容器后立即执行一次
docker diff记录基线 - 触发业务行为(如上传文件、生成报告、调用 API)
- 再次执行
docker diff,用diff命令比对两次输出,聚焦新增的 A 行 - 如需查看具体文件内容,可用
docker exec myapp cat /tmp/xxx(注意权限与容器内工具是否可用)
注意事项与常见误区
docker diff 只反映容器可写层(top layer)的变化,不包含镜像只读层中的原始文件:
- 它无法显示容器内进程已打开但尚未写入磁盘的“内存临时文件”(如 mmap 匿名区域)
- 如果容器使用了 tmpfs 挂载(如
-v /tmp:/tmp:rw,tmpfs),docker diff不会追踪该挂载点内的变更(因属于 volume,不在联合文件系统中) - 重启容器后 diff 记录清空,如需长期审计,应在运行中定期快照或改用日志+监控方案


















