docker diff命令用于查看容器可写层与原始镜像的文件系统差异,输出A(新增)、C(修改)、D(删除)三类状态,不显示内容细节,支持容器运行或停止时使用。
docker diff 命令用于查看容器的文件系统与镜像原始层之间的差异,能快速识别哪些文件被添加、修改或删除。它不显示内容变化细节(比如某文件改了哪几行),只反映文件状态变更类型。
基础用法:查看容器整体改动
运行以下命令即可列出指定容器自启动以来所有文件系统的变更:
- docker diff <容器名或ID>
例如:
-
docker diff my-nginx —— 查看名为
my-nginx的容器改动 -
docker diff a1b2c3d4 —— 查看 ID 开头为
a1b2c3d4的容器改动
理解输出结果的三类标记
命令输出每行以一个字母开头,表示该路径的变更类型:
- A:Added(新增文件或目录)—— 容器内存在,但镜像中没有
- C:Changed(修改文件或目录)—— 文件内容或元数据(如权限、属主)被改动,或目录下有新增/删除项
- D:Deleted(删除文件或目录)—— 镜像中有,但容器中已被删掉
示例输出:
A /app/logs C /etc/nginx/nginx.conf D /tmp/installer.sh
说明:容器里新增了 /app/logs 目录,修改了 Nginx 配置文件,删掉了安装脚本。
配合其他命令提升排查效率
docker diff 本身不支持过滤或高亮,但可结合 shell 工具快速定位问题:
- 只看新增文件:docker diff my-app | grep "^A "
- 只看被修改的配置:docker diff my-app | grep "^C.*\.conf$"
- 统计各类变更数量:docker diff my-app | cut -c1 | sort | uniq -c
注意事项和常见误区
- 仅反映容器可写层(top layer)的变动,对只读镜像层无效
- 不会显示挂载卷(volume/bind mount)中的改动,这些路径默认不受 diff 检查影响
- 容器停止后仍可执行
docker diff,只要未被删除 - 如果输出为空,说明容器运行期间未改动任何镜像自带文件


















