首页/云/Docker 容器速查/docker diff 查看容器文件改动
基础命令50 条

docker diff 查看容器文件改动

列出容器可写层相对镜像的文件变化:A 新增、C 修改、D 删除;用于定位运行期间被写入或被改动的文件。

Docker 容器速查云更新于 2026-10-13

docker diff 是什么

diff 用来对比容器可写层与它所基于的镜像,列出运行期间被新增、修改与删除的文件路径。它给出的是一份「变了哪些文件」的清单,不含内容差异,因此常作为排查起点:先确定范围,再用 exec 或 logs 深入。注意它只看可写层,挂载卷里的变化不属于比较范围。

基本信息

语法docker diff 容器
三个标记A 表示新增、C 表示内容或属性变化、D 表示删除
比较范围容器可写层与镜像原始内容之间
不包含挂载卷(-v/--mount)里的任何变化
相关命令docker commit 固化改动、docker export 导出文件系统
适用平台所有支持 Docker 的 Linux 与 Windows 容器环境

典型使用场景

  • 排查配置被谁改动:定位应用启动后修改的文件
  • 确认容器是否有隐式写盘行为,评估是否该改挂载卷
  • 分析异常容器:对比正常与异常实例的文件差异
  • 提交快照前检查夹带了哪些临时文件
  • 迁移或导出前确认真正需要保留的路径

使用与缩小范围

使用与缩小范围
# 全量输出:A 新增、C 修改、D 删除
docker diff web

# 只看新增文件(应用启动时写入的内容通常是新增)
docker diff web | grep '^A' | head -50

# 排除高频噪音目录,聚焦可疑路径
docker diff web | grep -v -E '^C /var/log|^C /tmp' | head -50

# 与 logs 结合:先定位改动时间点,再判断是否与报错同时发生
docker logs --tail 100 web

输出逐列读法

标记含义常见文件与判断
A新增缓存、运行期生成的数据、日志文件
C内容或元数据变化配置文件、数据库文件、权限变更
D删除临时文件清理、被应用移除的旧配置
无前缀路径未被改动可忽略
大量 /var/log 变化日志写进可写层建议改为挂载卷或输出到标准输出
diff 只给路径不给内容,想知道具体改了什么,需要配合 docker exec 查看文件,或与镜像原始内容做进一步比对。
长时间运行的容器 diff 输出可能成千上万行,先按目录或标记过滤再阅读;把结果导出到文件再检索通常比在终端里翻页高效。

易错点

  • 只有路径没有内容,误以为一眼能看出改了什么,实际多数情况还要进容器核对文件内容
  • 忘记挂载卷不在比较范围,卷里的数据变化完全看不到,排查时容易得出错误结论
  • 运行久的容器 diff 输出极长,不做过滤直接阅读会淹没线索
  • 把 diff 结果当发布变更清单:它只反映文件系统变化,环境变量与启动参数的变化不在其中

数据来源与参考

  • Docker 官方 CLI 参考:docker diff(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌