如何在不拉图像的情况下在 docker hub 上添加标签别名

Pom*_*oma 11 docker dockerhub

当我在 CI 中构建映像时,我会使用唯一的 SHA 标签推送它。然后当我将它部署到生产中时,我想更改:latest别名以指向相同的图像,如下所示:

docker pull org/foo:34f8a342
docker tag org/foo:34f8a342 org/foo:latest
docker push org/foo:latest
Run Code Online (Sandbox Code Playgroud)

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

mab*_*ham 17

使用实验 docker manifest命令:

docker manifest create $REPOSITORY:$TAG_NEW $REPOSITORY:$TAG_OLD
docker manifest push $REPOSITORY:$TAG_NEW
Run Code Online (Sandbox Code Playgroud)

对于私有注册表,您可能需要添加$REGISTRY/到存储库之前。

  • 如果您的存储库中已经有“$TAG_NEW”标签,请不要忘记使用“--amend”命令行选项来“docker manifest create”。 (3认同)

小智 5

从这里可以看出,这是不允许的,但如果问题是拉动整个镜像很慢,正如有人在评论中提到的那样,那么只需通过 Docker 注册表 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}"
Run Code Online (Sandbox Code Playgroud)


dvn*_*yen 1

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

docker build -t org/foo:34f8a342 -t org/foo:latest .
Run Code Online (Sandbox Code Playgroud)

  • 但在构建时,我还不想使用“:latest”标签上传此图像,我想首先将其部署到暂存和测试。因此,第二个标签将丢失,因为构建机器在构建完成后立即被销毁。 (5认同)