如何在 docker hub 上添加标签别名而不拉取镜像

问题描述 投票:0回答:4

当我在 CI 中构建映像时,我会使用唯一的 SHA 标签推送它。然后,当我将其部署到生产时,我想更改

:latest
别名以指向相同的图像,如下所示:

docker pull org/foo:34f8a342
docker tag org/foo:34f8a342 org/foo:latest
docker push org/foo:latest

现在我想避免拉动这个图像。问题是用于部署脚本的容器与用于构建它的容器不同,因此我本地没有此映像。有没有什么方法可以在 docker hub 上添加标签别名,而不需要在本地拥有此镜像?

docker dockerhub
4个回答
14
投票

使用 实验性

docker manifest
命令:

docker manifest create $REPOSITORY:$TAG_NEW $REPOSITORY:$TAG_OLD
docker manifest push $REPOSITORY:$TAG_NEW

对于私有注册表,您可能需要将

$REGISTRY/
添加到存储库。


5
投票

正如here所见,这是不允许的,但如果问题是拉动整个镜像很慢,正如有人在评论中提到的那样,那么只需通过Docker“拉动”清单如here就可以更快地实现注册表API

MANIFEST=$(curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "${REGISTRY_NAME}/v2/${REPOSITORY}/manifests/${TAG_OLD}")
curl -X PUT -H "Content-Type: application/vnd.docker.distribution.manifest.v2+json" -d "${MANIFEST}" "${REGISTRY_NAME}/v2/${REPOSITORY}/manifests/${TAG_NEW}"

1
投票

我不知道直接在 docker hub 上标记 docker 镜像。您的问题有一个解决方法,即在构建图像时用两个标签标记图像。

docker build
允许为一个构建创建多个标签:

docker build -t org/foo:34f8a342 -t org/foo:latest .

0
投票

就我而言,我必须向现有的多拱形图像添加额外的标签。 Docker 标签不起作用,因为它只会拉取并标记与我的操作系统匹配的映像。

我不想再次使用

docker buildx imagetools create
,因为它会创建一个新的imageIndex。

我使用了Skopeo复制命令。

skopeo --multi-arch=index-only copy docker://<IMAGE>:<TAG> docker://<IMAGE>:<NEW TAG>
© www.soinside.com 2019 - 2024. All rights reserved.