如何从AWS ECR容器registry中删除未标记的图像

将图像推送到Amazon ECR时,如果标记已存在于回购站中,则旧图像保留在registry中,但处于未标记状态。

所以,如果我docker推image/haha:1.0.0第二次我做到这一点(提供的东西改变)第一个图像从AWS ECR untagged。

有没有办法安全地清理未标记图像的所有registry?

您可以在一个请求中删除所有图像,不使用循环:

 IMAGES_TO_DELETE=$( aws ecr list-images --region $ECR_REGION --repository-name $ECR_REPO --filter "tagStatus=UNTAGGED" --query 'imageIds[*]' --output json ) aws ecr batch-delete-image --region $ECR_REGION --repository-name $ECR_REPO --image-ids "$IMAGES_TO_DELETE" || true 

首先得到一个jag格式的未标记图像列表:

[ {"imageDigest": "sha256:..."}, {"imageDigest": "sha256:..."}, ... ]

然后,它将该列表发送到batch-image-delete

最后|| true || true没有未加标签的图像,则需要|| true来避免错误代码。

我实际上使用aws cli伪造了一个一行的解决scheme

aws ecr describe-repositories --output text | awk '{print $5}' | while read line; do aws ecr list-images --repository-name $line --filter tagStatus=UNTAGGED --query 'imageIds[*]' --output text | while read imageId; do aws ecr batch-delete-image --repository-name $line --image-ids imageDigest=$imageId; done; done

它所做的是:

  • 获取所有的存储库
  • 为每个存储库给我所有的图像tagStatus=UNTAGGED
  • 对于每个图像+回购问题batch-delete-image