首页/云/云与容器速查/docker diff 查看容器文件系统改动
容器与 Docker106 条

docker diff 查看容器文件系统改动

列出容器相对镜像的文件系统变化:A 新增、C 修改、D 删除;用于定位『容器里改了什么』,也是决定要不要固化进镜像的依据。

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

容器里改了什么

docker diff 列出容器相对其镜像的文件系统变化,用新增、修改、删除三类标记表示。它回答的是「容器里到底改了什么」:既用于排查有人手工改过文件造成的行为异常,也用于判断哪些改动值得固化进镜像。需要注意它只比较容器可写层与镜像,不包含挂载卷里的内容。

基本信息

标记含义A 为新增,C 为修改,D 为删除
排查场景服务行为异常,怀疑有人在容器里手工改过文件
运维场景判断哪些改动应写回镜像与编排
不覆盖范围只显示相对镜像的改动,不含挂载卷内容
局限容器重建后可写层消失,这些改动不会保留
配合用法与 grep 组合只看关心的路径或只看某一类标记

典型使用场景

  • 排查「代码没改但行为不同」,确认是否有人改过容器内文件
  • 纠偏流程:把容器里的手工修补写回镜像,避免下次重建后失效
  • 安全排查:确认容器内是否被写入异常文件或脚本
  • 构建优化:找出运行期才产生变化的目录,判断是否需要持久化
  • 重建前核对改动清单,确认重建不会丢掉必要内容

使用示例

使用示例
docker diff myapp
docker diff myapp | grep -E '^A|^C' | head -n 30     # 只看新增与修改
docker diff myapp | grep -E '^D'                     # 只看被删除的文件
docker diff myapp | wc -l                            # 改动规模
docker inspect -f '{{json .Mounts}}' myapp           # 排除挂载卷内容的干扰

标记与处理建议

标记含义处理建议
A新增文件区分运行时正常产物与手工改动,前者可不处理
C修改文件重点关注配置与代码文件,通常是手工修补的痕迹
D删除文件可能是有意清理,也可能是误删,需与业务确认
大量记录配置漂移信号把变动固化进镜像与编排,停止手工修补
频繁出现大量新增与修改记录,说明有人习惯在容器里做事后修补:这是配置漂移的信号。处理方式是把变动固化进镜像与编排,让重建后的容器与线上保持一致。
容器的可写层改动不会持久化:容器一旦重建,这些改动全部消失。如果线上已经依赖了它们,重建就会直接变成故障,因此重建前应先用 diff 核对改动清单。

易错点

  • 把 diff 结果里的临时文件当问题文件删掉:影响运行态,引发新的异常
  • 误认为容器内的改动已持久化:容器重建即丢失,故障在重建时才暴露
  • 用 diff 判断挂载卷里的数据变化:它不包含卷内容,结论必然不完整
  • 长期依赖手工修补:配置漂移累积,重建后的环境与线上差异越来越大

数据来源与参考

  • Docker Docs:docker diff

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌