Direkt zum Inhalt

Wie stelle ich sicher, dass Amazon ECS bei der Bereitstellung das neueste Container-Instance-Bild-Digest verwendet?

Lesedauer: 3 Minute
0

Ich habe meinen Amazon Elastic Container Service (Amazon ECS)-Service aktualisiert, um Aufgaben mit dem neuesten Bild auszuführen, aber einige Aufgaben verwenden das neue Bild nicht. Oder meine Amazon ECS-Aufgaben schlagen fehl und ich erhalte den Fehler CannotPullContainerError.

Kurzbeschreibung

Wenn du ein Bild in Amazon ECS aktualisierst, erhältst du möglicherweise die folgende Fehlermeldung:

„CannotPullContainerError: pull image manifest has been retried 1 time(s): failed to resolve ref account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: not found“

Wenn du ein Bild aktualisierst, musst du auch den Service aktualisieren. Standardmäßig löst Amazon ECS Container-Bild-Tags, die in der Aufgabendefinition angegeben sind, in Container-Bild-Digests auf.

Bei einem Service, der eine einzelne Aufgabe ausführt und verwaltet, verwendet Amazon ECS die Aufgabe, um Bild-Digests für die Aufgaben-Container zu erstellen. Für einen Service, der mehrere Aufgaben ausführt und verwaltet, verwendet Amazon ECS die erste Aufgabe, die der Service-Scheduler während der Bereitstellung gestartet hat. Um das Bild-Digest zu aktualisieren, wenn du das Bild-Tag in der Aufgabendefinition aktualisierst, aktualisiere den Service und verwende die Einstellung Neue Bereitstellung erzwingen.

Weitere Informationen über das Verhalten von Bildern findest du unter Container-Bildauflösung.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Sicherstellen, dass der Service das neueste Bild verwendet

Um sicherzustellen, dass der Service das neueste Bild verwendet, aktualisiere den Amazon ECS-Service und verwende dann die Option Neue Bereitstellung erzwingen. Alternativ kannst du den folgenden AWS CLI-Befehl update-service ausführen:

aws ecs update-service --cluster clustername --service servicename --force-new-deployment

Hinweis: Ersetze clustername durch deinen Clusternamen und servicename durch deinen Servicenamen.

Aktualisiere die Aufgabendefinition, um ein bestimmtes Bild-Digest zu verwenden, und ändere dann den Abschnitt Bild-URI:

imageUri@imagedigest

"image": "accountid.dkr.ecr.region-name.amazonaws.com/image:latest@sha256:da04638bxxxxxxxxxx,"

Den Fehler „Image digest does not exist“ beheben

Wenn du die Fehlermeldung Image digest does not exist erhältst, überprüfe, ob du das Bild gelöscht hast.

Um zu überprüfen, ob das Bild-Digest in einem Amazon Elastic Container Registry (Amazon ECR)-Repository existiert, führe den Befehl describe-images aus:

aws ecr describe-images --repository-name repositoryname --region regionname --query 'sort_by(imageDetails,& imagePushedAt)[*]'

Hinweis: Ersetze repositoryname durch den Namen des Repositorys und regionname durch deine AWS-Region.

Die Ausgabe des Befehls zeigt alle Bilder im Repository an. Wenn kein Bild-Digest vorhanden ist, prüfe den AWS CloudTrail-Ereignisverlauf für den API-Aufruf BatchDeleteImage, um festzustellen, warum das Bild gelöscht wurde. Um zu überprüfen, ob eine Amazon ECR-Lebenszyklusrichtlinie ein Bild löschen kann, das eine laufende Aufgabe verwendet, überprüfe CloudTrail auf den API-Aufruf PolicyExecutionEvent.

Um sicherzustellen, dass sich ein Container-Bild-Tag nicht ändert, ist es am besten, das Feature Unveränderlichkeit von Tags zu aktivieren.

Hinweis: Das Container-Bild-Tag wird in Services, die den Bereitstellungs-Controller CODE_DEPLOY oder EXTERNAL verwenden, nicht aufgelöst.

Führe die Schritte im Abschnitt Sicherstellen, dass der Service das neueste Bild verwendet aus, um das Bild-Digest zu aktualisieren.

Versionskonsistenz deaktivieren

Möglicherweise musst du anstelle eines einheitlichen Bildes ein veränderbares Container-Bild-Tag wie LATEST verwenden. Aktualisiere deine Container-Definition, um die Einstellung zu konfigurieren und setze versionConsistency auf deaktiviert. Standardmäßig ist versionConsistency auf aktiviert gesetzt. Wenn du den Wert zu deaktiviert änderst, löst Amazon ECS das Container-Bild-Tag nicht mehr auf ein Digest auf. Stattdessen verwendet Amazon ECS den ursprünglichen Bild-URI in der Container-Definition für die Bereitstellung.

Ähnliche Informationen

Ankündigung der Software-Versionskonsistenz für Amazon ECS-Services

AWS OFFICIALAktualisiert vor 2 Jahren