配置哈希是干什么的
docker compose config --hash 输出服务配置的哈希指纹:对比两次输出即可判断哪些服务定义发生了变化,适合在发布脚本里决定需要重建的服务范围,避免每次发布都全量重启。
基本信息
| 语法 | docker compose config --hash [服务名…],或用 --hash='*' |
|---|---|
| 输出 | 按服务名映射到哈希值 |
| 用途 | 服务配置变化检测 |
| 版本 | 较新的 Compose V2 提供 |
| 替代做法 | 对 config 输出做校验和比对 |
典型使用场景
- 发布脚本里只重建配置真正变化的服务,缩短发布窗口
- 变更审计:把每次发布的哈希留档,回溯哪次改动引入变化
- 排查为什么每次发布都全量重启,找出哈希总在变化的服务
- 多环境比对:同一份编排在不同环境展开后的差异确认
- CI 里做配置漂移检测,发现有人绕开流程改了编排
基线留档与比对
基线留档与比对
docker compose config --hash='*' > /tmp/hash.new # 本次指纹落盘
diff /tmp/hash.old /tmp/hash.new || echo 存在变化 # 与上次对比
docker compose config --hash web api # 只看指定服务
cp /tmp/hash.new /tmp/hash.old # 更新基线
sha256sum <(docker compose config) # 老版本的替代做法哪些变化进哈希
| 关注点 | 是否进入哈希 | 说明 |
|---|---|---|
| 服务镜像与命令 | 是 | 属于服务定义本身 |
| 环境变量展开后的值 | 是 | 改变量即使文件没改也会变 |
| 绑定挂载的宿主文件内容 | 否 | 不属于编排定义 |
| 同标签镜像的新内容 | 否 | 标签未变则不体现 |
哈希比对反映编排定义的变化,但同标签镜像被重新推送(内容变了而标签没变)不在范围内,镜像更新要靠 digest 或额外校验。
不同 Compose 版本对哈希的实现可能有差异,跨版本比对结论不可直接套用,比对要在同一环境同一版本内做。
老版本 Compose 不支持 --hash,可以退化为对 docker compose config 的输出做 sha256sum 比对,效果接近。
把哈希比对接进流水线时,首次运行没有旧基线,要先落一份基线再启用差异判断,否则第一次会被判成全量变化。