docker diff 是 Docker 内置命令,用于显示容器文件系统相对于原始镜像的变更,标识 A(新增)、C(修改)、D(删除)三类操作,不依赖外部工具,适用于运行中或已停止容器。

DockerDiff 并不是 Docker 官方提供的工具,也没有名为 DockerDiff 的标准命令或镜像。你可能指的是利用 Docker 原生命令 docker diff 来查看容器启动后文件系统的变更记录——这是 Docker 内置的、轻量且实用的功能。
什么是 docker diff?
docker diff 用于对比容器运行时与原始镜像文件系统之间的差异,显示容器内被添加(A)、修改(C)或删除(D)的文件/目录。它不依赖外部工具,也不需要进入容器,执行快、结果直观。
- A(Added):容器运行后新创建的文件或目录
- C(Changed):原有文件内容或元数据(如权限、属主)被修改
- D(Deleted):原始镜像中存在、但容器中已被删除的路径
基本用法:快速查看变更列表
确保容器正在运行或已停止(docker diff 支持两种状态),执行:
docker diff <container_name_or_id>
例如:
docker diff my-nginx A /var/log/nginx C /etc/nginx/nginx.conf A /app/data.tmp
输出按字母顺序排列,每行以标识符开头,后跟相对路径(相对于容器根目录)。
结合其他命令增强分析效果
单独看路径不够直观?可配合以下方式深入排查:
- 用
docker exec进入容器,检查具体文件内容:docker exec -it my-nginx cat /etc/nginx/nginx.conf - 用
docker inspect查看容器挂载点,确认哪些变更是由 volume 或 bind mount 引起(这类路径通常标记为 C,但实际是宿主机同步导致) - 将输出导出为文件便于比对:
docker diff my-nginx > diff-report.txt
注意事项和常见误区
该命令有几点容易忽略的关键限制:
- 只反映容器层(top layer)的变更,不体现镜像多层叠加中的中间改动
- 对 tmpfs 挂载、/proc、/sys 等虚拟文件系统路径无意义,通常不会出现在结果中
- 若容器使用了
--read-only模式,大多数写操作被禁止,docker diff输出往往为空或极少 - 无法追溯“何时”变更,仅反映当前快照状态;如需审计时间线,需配合日志或外部监控方案


















