Docker推送添加标签而不是图像

我有一个私有的AWS ECR存储库,用于推送图像。

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

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

这有效,我可以在存储库中看到带有正确图像URI和development标记的新图像。

但是,当我尝试通过使用

添加带有其他标签的新图像时
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存储库中。

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

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

pingkang 回答:Docker推送添加标签而不是图像

如果图像相同,而您只是用不同的标签推动,则ECR将检查清单是否将其显示在同一标签下。

enter image description here 简而言之,如果图像摘要相同,则ECR将使用不同的标签将其视为相同。

enter image description here

因此,由于您的图片相同,我建议使用retagging image.

重新标记图像

  

对于Docker Image Manifest V2 Schema 2映像,您可以使用   put-image命令的--image-tag选项可重新标记现有图像。您可以重新标记,而无需使用Docker拉或推映像。   对于较大的图像,此过程可节省大量网络   重新标记图像所需的带宽和时间。

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

图像标签可变性

  

您可以将存储库配置为不可变的,以防止图像标签   不会被覆盖。一旦配置了存储库   不可变的标记,则会出现 ImageTagAlreadyExistsException错误   如果您尝试推送带有已存在标签的图像,则返回   存储库中存在。

image-tag-mutability

本文链接:https://www.f2er.com/3115249.html

大家都在问