Docker 强制覆盖最后一个标签并推送 AWS ECR

Mat*_*att 7 amazon-web-services docker

我正在通过docker push ...命令将我的图像推送到 AWS ECR 。图像被标记为特定版本。

当我实际推送具有相同标签的两个不同映像时,这会导致 AWS ECR 注册表中出现两个映像,其中一个未标记。

0.0.1 sha256:572219f8764b21e5a045bcc1c5eab399e2bc2370a37b23cb1ca9298ea39e233a 138.33 MB
      sha256:60d161db0b9cb1345cf7c3e6119b8eba7114bc2dfc44c0b3ed02454803f6ef76 138.21MB
Run Code Online (Sandbox Code Playgroud)

这导致的问题是,如果我继续推送更多具有相同标签的图像,存储库的总大小会不断增加。

我想要的是在推送图像时“覆盖”现有标签。这意味着具有相同标签的两个不同 sha256 摘要将导致注册表中的单个图像(当然当标签版本更改时多个)。

有可能这样做吗?如果可能,我想避免使用“未标记的”修剪技术。现在,我的发布脚本会删除以前的相同标签(如果存在),但我觉得这应该由 AWS ECR 处理或docker push直接处理。

kop*_*tsa 3

不幸的是这是不可能的。您可以执行以下操作:

  1. 对要覆盖的图像使用 2 个不同的标签。我会推荐一个带有版本的标签和另一个带有已知前缀和保证唯一的标签,例如 1.1.1 和 SNAPSHOT-hash。下次推送同版本镜像时,旧镜像中的1.1.1标签将会被移除,并添加到新镜像中。但是 SNAPSHOT-* 标签将保留在所有图像中。
  2. 配置生命周期策略,其中从 SNAPSHOT- 开始的映像将在映像计数超过 x 后过期。这样,旧图像将自动过期。