LABEL 是什么
LABEL 给镜像附加键值对形式的元数据:版本、来源仓库、许可证、维护者等信息都可以写进去。这些标签保存在镜像配置里,可以用 inspect 读取,也会被镜像仓库页面与安全扫描工具读取。它取代了早期用于声明维护者的 MAINTAINER 指令,后者已经不再推荐使用。
基本信息
| 语法 | LABEL key=value key2=value2(一条写多对,减少层数) |
|---|---|
| 推荐键名 | OCI 注解体系:org.opencontainers.image.* 系列 |
| 常用键 | title、version、source、revision、licenses、created、authors |
| 查看方式 | docker image inspect -f '{{json .Config.Labels}}' 镜像 |
| 替代指令 | MAINTAINER 已废弃,改用 org.opencontainers.image.authors |
| 适用平台 | 所有 Docker 镜像格式(OCI 与 docker 格式均支持) |
典型使用场景
- 合规留痕:记录版本与源代码提交号,便于追溯镜像对应哪次发布
- 仓库页面展示:让制品库中的镜像带上描述与许可证信息
- 自动化巡检:按标签筛选镜像,例如按环境或团队归类
- 扫描工具联动:部分工具会读取标签判断来源与版本
- 审计场景:从运行中的镜像反查构建来源与责任人
声明与读取
声明与读取
# 一条指令写多对,避免每对标签各占一层
LABEL org.opencontainers.image.title="web-api" \
org.opencontainers.image.version="1.0.0" \
org.opencontainers.image.revision="git-abc1234" \
org.opencontainers.image.source="https://example.com/repo" \
org.opencontainers.image.licenses="MIT"
# 构建期把版本号传进来,避免写死后忘记更新
ARG APP_VERSION=dev
LABEL org.opencontainers.image.version="${APP_VERSION}"读取与核对
读取与核对
# 查看全部标签
docker image inspect -f '{{json .Config.Labels}}' app/web:1.0
# 只取版本与来源,用于发布记录
docker image inspect -f '{{index .Config.Labels "org.opencontainers.image.version"}} {{index .Config.Labels "org.opencontainers.image.revision"}}' app/web:1.0
# 按标签值筛选镜像(docker images 的 label 过滤针对构建期标签)
docker images --filter 'label=org.opencontainers.image.version=1.0.0'常用键怎么读
| 键 | 含义 | 实践建议 |
|---|---|---|
| image.title | 镜像名称 | 与仓库名一致便于识别 |
| image.version | 版本号 | 构建参数注入,避免写死 |
| image.revision | 源码提交号 | CI 自动填,便于回溯 |
| image.source | 源码地址 | 审计与问题反馈入口 |
| image.licenses | 许可证 | 合规扫描会读取 |
| image.authors | 维护者 | 替代已废弃的 MAINTAINER |
标签值是字符串:包含空格或特殊字符时必须加引号,否则解析出错。变量拼接时建议整体加引号,避免空值导致格式异常。
标签写入镜像配置,修改标签需要重新构建(或用构建工具重新打标)。不要用标签承载密钥信息,镜像配置可被任何人读取。