标签写的是什么
docker build --label 或 Dockerfile 的 LABEL 指令把键值对写进镜像配置,随镜像一起分发。按 OCI 约定使用 org.opencontainers.image.* 前缀,会让镜像在仓库界面、漏洞扫描器与资产盘点工具里被自动识别出版本、来源与许可证,而不是只靠人工维护一张对照表。标签只改元数据,不产生新的镜像层。
基本信息
| 写入方式 | Dockerfile 的 LABEL 键=值 或 docker build --label 键=值 |
|---|---|
| 标准前缀 | org.opencontainers.image.* |
| 查看 | docker image inspect --format {{json .Config.Labels}} |
| 影响面 | 仅镜像元数据,不影响运行时行为 |
典型使用场景
- 供应链溯源:让扫描器与仓库页面直接显示版本、修订号与源码地址,减少人工比对
- 资产盘点:批量 inspect 导出标签,统计在跑的都是什么版本、谁维护
- 发布记录对齐:把构建时的提交号写进镜像,出问题时能快速定位到代码版本
- 许可证合规:把 licenses 标签写进镜像,盘点分发的许可证类型
- 流水线自动注入:在 CI 里用构建号与提交号生成标签,避免手工填写遗漏
构建与核对
构建与核对
# 构建时注入标准元数据
docker build \
--label org.opencontainers.image.version=1.4.2 \
--label org.opencontainers.image.revision=abc1234 \
--label org.opencontainers.image.source=https://git.example.com/team/app \
-t app/web:1.4.2 .
# 读回标签核对
docker image inspect app/web:1.4.2 --format '{{json .Config.Labels}}'
# 只取版本与修订号,便于写进发布记录
docker image inspect app/web:1.4.2 --format '{{index .Config.Labels "org.opencontainers.image.revision"}}'常用键对照
| 键 | 含义 | 典型取值 |
|---|---|---|
| org.opencontainers.image.version | 对外版本号 | 1.4.2 或 git describe 结果 |
| org.opencontainers.image.revision | 源码修订号 | 流水线里的提交 SHA |
| org.opencontainers.image.source | 源码仓库地址 | 内部 Git 仓库 URL,供扫描器关联 |
| org.opencontainers.image.licenses | 许可证标识 | Apache-2.0 等 |
| org.opencontainers.image.created | 构建时间戳 | 会让构建产物不稳定,慎用 |
created 一类随时间变化的标签会破坏构建的可复现性,如果镜像需要做分层缓存校验或产物比对,这一项先不要写。
标签值随镜像分发给每一个拉取者,内部主机名、跳板地址、临时凭据这类信息不要写进去。
标签是声明式信息,不参与签名校验:镜像被重新构建、内容变化而标签没变的情况并不罕见,做完整性判断要回到 digest 与仓库的不变标签策略上。