Docker 镜像标签与 digest:可读版本和固定内容不是一回事
前几篇分别讲了用 nginx 托管静态页时的端口映射与文件挂载、练习结束后的清理,以及 -p 左侧绑定 127.0.0.1 与 0.0.0.0 的差异。本篇只复查一下「镜像标签」和「digest」:可读的版本名,并不等于固定的镜像内容。下列命令均为本机只读查看示例,不要求 pull、run 或改环境;若本机没有对应镜像,对照输出字段即可,也不必为写笔记去拉镜像。
1. 所有标签都可变,不只是 latest
练习里常见写法如 nginx:latest、nginx:stable-alpine,或带渠道、小版本的标签,本质都是可变指针:仓库维护者可以在同一标签名下发布新构建。官方构建实践文档也说明,像 alpine:3.21 这类看似「钉住小版本」的标签,仍可能随补丁发布指向不同内容。标签越具体,往往越便于沟通意图(例如走哪条渠道、哪类变体),但不能据此称「稳定复现」或「已固定」。换台机器、隔几周再拉同名标签,内容仍可能不同。
2. digest 固定内容;本机 Image ID 不是它的同义词
需要对照「内容是否同一份」时,可先在本机只读查看(有镜像才有输出):
docker image ls --digests nginx
docker image inspect nginx:stable-alpine --format '{{.Id}}{{"\n"}}{{range .RepoDigests}}{{.}}{{"\n"}}{{end}}'
官方说明:digest 是镜像清单的内容寻址标识,同一 digest 对应同一份内容;标签可改写,digest 不会被「改名复用」。Id 是镜像配置 JSON 的内容哈希;RepoDigests 才是与仓库关联的 digest 引用。二者都是 sha256,但不是同一概念,不要互相代替。本篇不提供可照抄的真实 digest;记录时应保留 RepoDigests 中完整的仓库引用。
3. 记下 digest ≠ 已 pin;复现与安全补丁要主动权衡
把标签和 digest 写进笔记,只说明「当时看到了什么」,不等于部署或脚本已按 digest 引用。真正固定内容,需要在引用处使用 name@sha256:... 这类形式(见官方 pull / Dockerfile 说明)。官方同时提醒:按 digest pin 后,不会自动拿到含安全更新的新构建,升级要主动改 digest。练习环境可继续用可读标签便于跟文档对照;需要严格复现时再决定是否 pin,并定期复查是否该主动升级。本篇只澄清概念与查阅方式,不把成文当作已完成一次 pin、对照或升级实验。
- 点赞
- 收藏
- 关注作者
评论(0)