Docker 推动添加标签而不是图片

Docker Push Adding Tags instead of Images

我有一个私有 AWS ECR 存储库,我在其中推送图像。

我正在运行使用以下命令来推送图像,

1. docker build -t $REPOSITORY_URL:develop -f ./docker/root/dockerfile .
2. docker push $REPOSITORY_URL:develop

这有效,我可以在我的存储库中看到一个新图像,其中包含正确的图像 URI 和 develop 标签。

但是,当我尝试使用

添加具有不同标签的新图像时
1. docker build -t $REPOSITORY_URL:release -f ./docker/root/dockerfile .
2. docker push $REPOSITORY_URL:release

在我的 ECR 存储库中,我没有看到新图像,但我看到带有两个标签的原始图像。原来的开发标签和现在的发布标签。

我希望因为我将 $REPOSITORY_URL:release 标签定义为发布,所以当我 运行 docker push $REPOSITORY_URL:release 时它会使用新标签推送我的新图像,我会能够在我的 ECR 存储库中看到两个图像。

目前,出于测试目的,这些图像是相同的。我认为这是导致此问题的原因。如果我 运行 使用不同的图像执行上述命令,它会按预期工作。

有没有办法防止这种情况发生?例如在生产中,如果我必须让相同的图像使用我的不同标签,它们将能够按预期推送和工作吗?

如果图像相同,而您只是使用不同的标签进行推送,那么 ECR 将检查清单并将其显示在同一标签下。

简而言之,如果图像摘要相同,ECR 将认为它与不同的标签相同。

因为你的图片是一样的,所以我建议使用 retagging image.

重新标记图片

With Docker Image Manifest V2 Schema 2 images, you can use the --image-tag option of the put-image command to retag an existing image. You can retag without pulling or pushing the image with Docker. For larger images, this process saves a considerable amount of network bandwidth and time required to retag an image.

此外,ECR 还有一个有趣的功能。

图像标签可变性

You can configure a repository to be immutable to prevent image tags from being overwritten. Once the repository is configured for immutable tags, an ImageTagAlreadyExistsException error will be returned if you attempt to push an image with a tag that already exists in the repository.

image-tag-mutability