將圖像推送到Amazon ECR時,如果標記已存在於回購站內,則舊圖像保留在註冊表中,但處於未標記狀態。如何從AWS ECR容器註冊表中刪除未標記的圖像
所以如果我碼頭推image/haha:1.0.0
第二次我這樣做(提供的東西改變)第一個圖像從AWS ECR
未標記。
有沒有辦法從未標記的圖像安全地清理所有註冊表?
將圖像推送到Amazon ECR時,如果標記已存在於回購站內,則舊圖像保留在註冊表中,但處於未標記狀態。如何從AWS ECR容器註冊表中刪除未標記的圖像
所以如果我碼頭推image/haha:1.0.0
第二次我這樣做(提供的東西改變)第一個圖像從AWS ECR
未標記。
有沒有辦法從未標記的圖像安全地清理所有註冊表?
我居然僞造使用一個在線解決方案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
它在做什麼是:
tagStatus=UNTAGGED
batch-delete-image
您可以在單個請求刪除所有圖像,沒有循環:
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
首先它會是未經標記的圖像的列表,以JSON格式:
[ {"imageDigest": "sha256:..."}, {"imageDigest": "sha256:..."}, ... ]
然後它將該列表發送到batch-image-delete
。
最後的|| true
是必需的,以避免沒有未標記圖像時的錯誤代碼。
現在,ECR支持生命週期策略(https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html),您可以使用它自動刪除未標記的圖像。
設置使用控制檯
打開亞馬遜的ECS控制檯在https://console.aws.amazon.com/ecs/一個生命週期策略預覽。
從導航欄中選擇包含要執行生命週期策略預覽的 存儲庫的區域。
在導航窗格中,選擇存儲庫並選擇一個存儲庫。
在All repositories:repository_name頁面上,選擇Dry-Run Lifecycle Rules,Add。
輸入以下詳細爲您的生命週期策略規則:
對於規則優先級,鍵入規則優先級的數字。
對於規則描述,鍵入生命週期策略 規則的描述。
對於圖像狀態,選擇標記或未標記。
如果指定標記爲圖像狀態,那麼標籤前綴列表, 可以選擇指定的圖像標籤的列表上採取行動 您的生命週期策略。如果您指定了無標記,則此 字段必須爲空。
對於匹配條件,請選擇計數類型,計數編號和計數單位(如果適用)的值。
選擇保存
通過重複步驟5-7創建其他生命週期策略規則。
要運行生命週期策略預覽,請選擇保存並預覽結果。
在預覽圖像結果下,查看您的生命週期 策略預覽的影響。
如果您對預覽結果滿意,請選擇應用爲 生命週期策略以創建具有指定的 規則的生命週期策略。
從這裏: https://docs.aws.amazon.com/AmazonECR/latest/userguide/lpp_creation.html
我嘗試了您的答案中列出的步驟,但似乎並未刪除舊圖像。幹運行策略時,它會正確列出所有要刪除的圖像,但在應用策略時實際上並未被刪除。我錯過了什麼? – Broadwell
我沒有 '--filter' 選項,你用的是什麼版本? (我有aws-cli/1.10.39) – Dimitris
更新:v1.11.44支持過濾器 – Dimitris