2016-12-03 25 views
7

Khi đẩy hình ảnh vào Amazon ECR, nếu thẻ đã tồn tại trong repo, hình ảnh cũ vẫn nằm trong sổ đăng ký nhưng ở trạng thái không được gắn thẻ.Cách xóa hình ảnh không được gắn thẻ từ AWS ECR Container Registry

Vì vậy, nếu i docker đẩy image/haha:1.0.0 lần thứ hai tôi làm điều này (miễn là có điều gì đó thay đổi) hình ảnh đầu tiên không được gắn thẻ từ AWS ECR.

Có cách nào để dọn dẹp an toàn tất cả sổ đăng ký khỏi hình ảnh không được gắn thẻ không?

Trả lời

4

Tôi thực sự giả mạo một giải pháp một dòng sử dụng 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

gì nó làm là:

  • nhận được tất cả các kho
  • cho mỗi kho cho tôi tất cả hình ảnh với tagStatus=UNTAGGED
  • cho mỗi hình ảnh + số phát hành lại batch-delete-image
7

Bạn có thể xóa tất cả hình ảnh trong một yêu cầu duy nhất, mà không có vòng:

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 

Đầu tiên nó được một danh sách các hình ảnh được gắn thẻ, ở định dạng json:

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

Sau đó, nó sẽ gửi danh sách đó đến batch-image-delete.

Yêu cầu || true cuối cùng để tránh mã lỗi khi không có hình ảnh không được gắn thẻ.

+0

Tôi không có tùy chọn '--filter', những phiên bản nào bạn sử dụng? (Tôi có aws-cli/1.10.39) – Dimitris

+0

Cập nhật: v1.11.44 hỗ trợ bộ lọc – Dimitris

1

Bây giờ, chính sách vòng đời hỗ trợ ECR (https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html) bạn có thể sử dụng nó để xóa các hình ảnh không được gắn thẻ tự động.

Thiết lập một bản xem trước chính sách vòng đời sử dụng giao diện điều khiển

Mở Amazon ECS console tại https://console.aws.amazon.com/ecs/.

Từ thanh điều hướng, chọn khu vực chứa kho lưu trữ để thực hiện xem trước chính sách vòng đời.

Trong ngăn dẫn hướng, hãy chọn Kho lưu trữ và chọn một kho lưu trữ.

Trên trang Tất cả kho lưu trữ: repository_name, chọn Chạy khô Quy tắc vòng đời, Thêm.

Nhập các chi tiết sau đây cho quy tắc chính sách vòng đời của bạn:

Đối với Quy tắc ưu tiên, gõ một số cho ưu tiên quy tắc.

Đối với mô tả quy tắc, hãy nhập mô tả cho chính sách vòng đời quy tắc.

Đối với trạng thái hình ảnh, hãy chọn Gắn thẻ hoặc Bỏ gắn thẻ.

Nếu bạn chỉ định Được gắn thẻ cho Trạng thái hình ảnh, thì đối với Danh sách tiền tố thẻ, bạn có thể tùy chọn chỉ định danh sách các thẻ hình ảnh để thực hiện hành động với chính sách vòng đời của bạn. Nếu bạn đã chỉ định Untagged, trường này phải trống.

Đối với tiêu chí Đối sánh, hãy chọn giá trị cho Loại số, Số Đếm và Đơn vị tính (nếu có).

Chọn Lưu

Tạo quy tắc chính sách vòng đời bổ sung bằng cách lặp lại các bước 5–7.

Để chạy xem trước chính sách vòng đời, hãy chọn Lưu và xem trước kết quả.

Trong Kết quả hình ảnh xem trước, hãy xem xét tác động của vòng đời của bạn xem trước chính sách.

Nếu bạn hài lòng với kết quả xem trước, hãy chọn Áp dụng chính sách vòng đời để tạo chính sách vòng đời với quy tắc được chỉ định.

Từ đây: https://docs.aws.amazon.com/AmazonECR/latest/userguide/lpp_creation.html

+0

Tôi đã thử các bước được liệt kê trong câu trả lời của bạn, nhưng dường như không xóa hình ảnh cũ. Khi chạy khô chính sách nó liệt kê chính xác tất cả các hình ảnh tôi định xóa, nhưng chúng không thực sự bị xóa khi áp dụng chính sách. Bất cứ điều gì tôi đang mất tích? – Broadwell

Các vấn đề liên quan