图像是否可以有多个标签?

Is it possible for image to have multiple tags?

当我将新图像推送到 repo 时,我希望它有两个标签,例如 0.2latest。这将允许始终通过使用 latest 标签和特定版本通过使用 0.2 标签来拉取最新的图像版本。 docker 可以吗?

有什么解决办法吗?我看到的唯一解决方案是进行两次单独的推送...

您可以创建多个标签:

docker tag <id> <user>/<image>:0.2
docker tag <id> <user>/<image>:latest

并推送这些。

您需要为每个版本推送一次,例如:

docker tag test:latest <repo>/<user>/test:latest
docker push <repo>/<user>/test:latest

docker tag test:0.2 <repo>/<user>/test:0.2
docker push <repo>/<user>/test:0.2

您也可以组合并说 latest 版本是 0.2,例如:

docker tag <repo>/<user>/test:latest <repo>/<user>/test:0.2
docker push <repo>/<user>/test:0.2

因此它们将指向相同的图像层。

您可以使用多个标签构建镜像,然后使用 --all-tags 选项推送镜像。

示例:

docker build -t reg/user/image:foo -t reg/user/image:latest .

docker push reg/user/image --all-tags

不支持--all-tags的老Docker客户端默认推送所有标签(干脆省略选项),新客户端默认只推送latest。或者,您可能希望单独推送每个标签。

在一张图片上添加多个标签是有正当理由的(参见 OP),但如果您想添加标签以供参考,最好使用 图片标签 .

Docker 标签 图像中,而不是在注册表中应用于图像。这意味着标签是不可变的,并且总是与图像一起复制。

Label Schemaversionvcs-refbuild-date 等定义了可互操作标签列表。

更新:2021 年 1 月之前

如果你没有在推送命令中指定标签,它会推送所有标签。

docker tag user/imagename:tag1
docker tag user/imagename:tag2

docker push user/imagename

如果您不想通过哈希引用图像,而是“复制标签”,您可以执行以下操作:

docker tag image:origin_tag image:target_tag
docker push image:target_tag