0

我希望能够删除 ECR 图像标签,但不删除底层图像本身。用例是一个临时标签,仅用于推送图像,然后作为清单列表的一部分引用,随后需要删除。

我发现从图像中删除标签但是在这种情况下没有帮助。该batch-delete-image操作有时只是删除一个标签(如果图像有多个标签),或者如果图像只有一个标签,则尝试删除图像本身。

如果该图像作为清单列表的一部分被引用,则操作失败:

$ aws ecr-public batch-delete-image --region=$REGION --repository-name $REPO --image-ids imageTag=TEMP 
2{
3    "imageIds": [],
4    "failures": [
5        {
6            "imageId": {
7                "imageTag": "TEMP"
8            },
9            "failureCode": "ImageReferencedByManifestList",
10            "failureReason": "Requested image referenced by manifest list: [sha256:f0446c2685b48eedefa1a90085c513ddae548226b087fa3a7ced8f94cf4aff70]"
11        }
12    ]
13}
4

1 回答 1

0

联系亚马逊支持后,有人告诉我,解决此限制的唯一方法是将一些随机图像推送到临时标签(我使用了 busybox),然后使用该batch-delete-image操作删除标签,如下所示:

$ docker pull busybox
$ docker tag busybox public.ecr.aws/$REPO:TEMP
$ docker push public.ecr.aws/$REPO:TEMP
$ aws ecr-public batch-delete-image --region=$REGION --repository-name $REPO --image-ids imageTag=TEMP

我不禁认为这种情况揭示了 ECR 中的设计缺陷,因为清单列表引用是使图像在注册表中保持活动所需的全部内容。ECR 似乎将标签视为图像的属性,而不是图像的独立指针。

编辑:我为此提出了一个问题:https ://github.com/aws/containers-roadmap/issues/1567

于 2021-11-22T11:45:23.813 回答