And*_*ega 12 amazon-web-services docker amazon-ecr
将图像推送到Amazon ECR时,如果标记已存在于repo中,则旧图像仍保留在注册表中,但处于未标记状态.
因此,如果我image/haha:1.0.0第二次使用docker push 这样做(假设某些内容发生了变化),那么第一张图片就会被取消标记AWS ECR.
有没有办法从未标记的图像中安全地清理所有注册表?
nfv*_*fvs 21
您可以在单个请求中删除所有图像,而无需循环:
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
Run Code Online (Sandbox Code Playgroud)
首先,它以json格式获取未标记的图像列表:
[ {"imageDigest": "sha256:..."}, {"imageDigest": "sha256:..."}, ... ]
然后它将该列表发送给batch-image-delete.
|| true当没有未标记的图像时,最后一个是避免错误代码所必需的.
And*_*ega 11
我实际上伪造了一个单行解决方案 aws cli
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
Run Code Online (Sandbox Code Playgroud)
它正在做的是:
tagStatus=UNTAGGEDbatch-delete-imageLor*_*odi 11
现在,该ECR支持生命周期策略(https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html),您可以使用它自动删除未标记的图像。
使用控制台设置生命周期策略预览
通过以下网址打开Amazon ECS控制台:https://console.aws.amazon.com/ecs/。
从导航栏中,选择包含要在其上执行生命周期策略预览的存储库的区域。
在导航窗格中,选择“存储库”,然后选择一个存储库。
在“所有存储库:repository_name”页面上,选择“空运行生命周期规则”,然后单击“添加”。
输入您的生命周期策略规则的以下详细信息:
对于“规则优先级”,为规则优先级键入一个数字。
对于“规则描述”,键入生命周期策略规则的描述。
对于“图像状态”,选择“已标记”或“未标记”。
如果您为“图像状态”指定了“已标记”,然后为“标记前缀列表”指定了,则可以选择指定要对其生命周期策略执行操作的图像标记列表。如果指定“未标记”,则此字段必须为空。
对于“匹配条件”,为“计数类型”,“计数编号”和“计数单位”选择值(如果适用)。
选择保存
通过重复步骤5-7创建其他生命周期策略规则。
要运行生命周期策略预览,请选择“保存并预览结果”。
在“预览图像结果”下,查看生命周期策略预览的影响。
如果对预览结果感到满意,请选择“应用为生命周期策略”以使用指定规则创建生命周期策略。
从这里:https : //docs.aws.amazon.com/AmazonECR/latest/userguide/lpp_creation.html
设置生命周期策略绝对是管理此问题的最佳方式。话虽如此 - 如果您确实有一堆要删除的图像,请记住,batch-delete-images 的最大值为 100。所以您需要这样做是因为未标记的图像数量大于 100:
IMAGES_TO_DELETE=$( aws ecr list-images --repository-name $ECR_REPO --filter "tagStatus=UNTAGGED" --query 'imageIds[0:100]' --output json )
echo $IMAGES_TO_DELETE | jq length # Gets the number of results
aws ecr batch-delete-image --repository-name $ECR_REPO --image-ids "$IMAGES_TO_DELETE" --profile qa || true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5922 次 |
| 最近记录: |