2016-12-03 10 views
7

Podczas przesyłania obrazów do Amazon ECR, jeśli znacznik już istnieje w repo, stary obraz pozostaje w rejestrze, ale przechodzi w stanie nieoznaczonym.Jak usunąć nieoznakowane obrazy z rejestru kontenera AWS ECR

Tak więc, jeśli po raz drugi wykonuję operację dokowania (jeśli coś się zmieni), pierwszy obraz zostanie usunięty z AWS ECR.

Czy istnieje sposób na bezpieczne oczyszczenie wszystkich rejestrów z nieoznaczonych obrazów?

Odpowiedz

4

I faktycznie wymyślił rozwiązanie jednego wiersza przy użyciu 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

co robi jest:

  • dostać Wszystkie repozytoria
  • dla każdego repozytorium dać mi wszystkie obrazy z tagStatus=UNTAGGED
  • dla każdego obrazu + wydania repo a batch-delete-image
7

Można usunąć wszystkie obrazy w jednym wniosku, bez pętli:

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 

Najpierw robi listę obrazów, które są nieoznakowane, w formacie JSON:

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

Następnie wysyła tę listę do batch-image-delete.

Ostatni kod jest wymagany, aby uniknąć kodu błędu, gdy nie ma nieoznaczonych obrazów.

+0

nie mam opcji '--filter', jakiej wersji używasz? (Mam aws-cli/1.10.39) – Dimitris

+0

Aktualizacja: v1.11.44 obsługuje filtry – Dimitris

1

Teraz, że zasady cyklu życia wsparcia ECR (https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html) można go użyć do automatycznego usunięcia nieoznakowanych obrazów.

Konfigurowanie podgląd zasad cyklu za pomocą konsoli

Otwórz konsolę Amazon ECS w https://console.aws.amazon.com/ecs/.

Na pasku nawigacyjnym wybierz region zawierający repozytorium , w którym można wykonać podgląd zasad cyklu życia.

W panelu nawigacji wybierz opcję Repozytoria i wybierz repozytorium.

Na stronie Wszystkie repozytorium: nazwa repozytorium wybierz opcję Dry-Run Reguły cyklu życia, Dodaj.

Wprowadź następujące dane dla reguły zasad cyklu:

Na zasadzie pierwszeństwa, należy wpisać numer dla priorytetu reguły.

Dla Opis reguły, wpisz opis reguły polityki cyklu życia reguły.

Dla opcji Status obrazu wybierz opcję Oznaczone lub Nieoznakowane.

Jeśli wybrano opcję Oznaczono jako Status obrazu, to w przypadku listy Przedrostek znacznika można opcjonalnie określić listę znaczników obrazu, na podstawie których można podjąć działanie zgodnie z polityką cyklu życia. Jeśli określono Nieoznaczone, to pole musi być puste.

Dla kryteriów dopasowania wybierz wartości dla typu liczenia, numeru zliczania i jednostki liczącej (jeśli dotyczy).

Wybierz Zapisz

Tworzenie dodatkowych zasad polityki cyklu powtarzając kroki 5-7.

Aby uruchomić podgląd zasad cyklu życia, wybierz opcję Zapisz i wyświetl podgląd wyników.

W części Podglądy obrazu można przejrzeć wpływ podglądu zasad cyklu życia produktu .

Jeśli wyniki podglądu są satysfakcjonujące, wybierz Zastosuj jako zasady cyklu życia, aby utworzyć zasadę cyklu życia z określonymi regułami .

stąd: https://docs.aws.amazon.com/AmazonECR/latest/userguide/lpp_creation.html

+0

Próbowałem kroków wymienionych w odpowiedzi, ale nie wydaje się, aby usunąć stare obrazy. Po zakończeniu działania zasady poprawnie wyświetla wszystkie obrazy, które zamierzam usunąć, ale w rzeczywistości nie zostaną usunięte podczas stosowania zasad. Coś, czego mi brakuje? – Broadwell

Powiązane problemy