如何从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