尽管有 ImageReferencedByManifestList 错误,但删除 ECR 图像标签

Remove ECR image tag despite ImageReferencedByManifestList error

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

我发现 但是在这种情况下没有帮助。 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}

联系亚马逊支持后,我被告知这个限制的唯一解决方法是将一些随机图像推送到临时标签(我使用 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