Wie behebe ich den Fehler „CannotPullContainerError“, wenn ich eine EC2-Aufgabe in Amazon ECS starte?

Lesedauer: 5 Minute
0

Wenn ich eine Amazon Elastic Compute Cloud (Amazon EC2)-Aufgabe in Amazon Elastic Container Service (Amazon ECS) starte, erhalte ich den Fehler „CannotPullContainerError“.

Kurzbeschreibung

Der CannotPullContainerError tritt aus folgenden Gründen auf:

  • Eine Starttypaufgabe von Amazon EC2 kann das Bild nicht abrufen, weil du das Netzwerk falsch konfiguriert hast.
  • Deine AWS Identity and Access Management (IAM)-Rolle verfügt nicht über Berechtigungen, um Bilder abzurufen.
  • Du hast dein DockerHub-Ratenkontingent erreicht.
  • Der Name oder das Tag des Images ist nicht vorhanden.
  • Die Aufgabendefinition verweist auf ein Bild, das sich in einem anderen AWS-Konto befindet.

Lösung

Das Runbook AWSSupport-TroubleshootECSTaskFailedToStart zur Fehlerbehebung verwenden

Verwende das Runbook AWSSupport-TroubleshootECSTaskFailedToStart, um Fehler bei Amazon ECS-Aufgaben zu beheben, die nicht gestartet werden können. Wenn du das Runbook ausführst, musst du die zuletzt fehlgeschlagene Task-ID verwenden. Wenn die fehlgeschlagene Aufgabe Teil eines Amazon ECS-Service ist, verwende die zuletzt fehlgeschlagene Aufgabe im Service. Die fehlgeschlagene Aufgabe muss während der Automatisierung in ECS:DescribeTasks sichtbar sein. Standardmäßig sind Amazon ECS-Aufgaben eine Stunde lang sichtbar, nachdem sie den Status Angehalten erreicht haben.

Um das Runbook zu initiieren, siehe AWSSupport-TroubleshootECSTaskFailedToStart. Verwende je nach Ergebnis der Automatisierung eine der folgenden Auflösungen.

Wichtig: Verwende das AWSSupport-TroubleshootECSTaskFailedToStart-Runbook in derselben AWS-Region, in der sich auch deine Amazon ECS-Cluster-Ressourcen befinden.

Deine Container-Instance-Netzwerkkonfiguration in Amazon-ECS ist falsch

Wenn deine Amazon-ECS-Container-Instance keine Internetverbindung hat, kann sie den Endpunkt Amazon Elastic Container Registry (Amazon ECR) nicht erreichen. Ohne eine Verbindung zum Endpunkt kann die Instance das Image nicht abrufen. Um sicherzustellen, dass deine Amazon ECS-Container-Instance über einen Internetzugang verfügt, gehe wie folgt vor:

Deine IAM-Rolle verfügt nicht über Berechtigungen zum Abrufen von Bildern

Vergewissere dich, dass die Instance-IAM-Rolle, die dem Instance-Profil zugeordnet ist, über die Berechtigung für den Zugriff auf das Amazon-ECR-Repository verfügt.

Hinweis: Die von AWS verwaltete Richtlinie AmazonEC2ContainerRegistryReadOnly bietet die minimal erforderlichen Berechtigungen zum Abrufen von Bildern.

Das DockerHub-Pull-Rate-Limit ist erreicht

Wenn du versuchst, ein Image von DockerHub abzurufen und dein Pull-Rate-Kontingent erreicht hast, erhältst du die folgende Fehlermeldung:

„CannotPullContainerError: inspect image has been retried 5 time(s): httpReaderSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/manifests/sha256:2bb501e6429 Too Many Requests - Server message: toomanyrequests:“

Um dieses Problem zu beheben, siehe Wie behebe ich den Fehler „CannotPullContainerError: You have reached your pull rate limit“ in Amazon ECS?

Der Name oder das Tag des Images ist nicht vorhanden

Wenn du ein Bild oder Tag definierst, das in Amazon ECR gehostet wird, aber das Bild oder Tag nicht existiert, erhältst du folgende Fehlermeldung:

„Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref 123456789.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: 123456789**.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: not found**“

Überprüfe, ob das Feld Bild in deiner Aufgabendefinition den richtigen Wert hat, um dieses Problem zu lösen. Vergewissere dich, dass das entsprechende Repository und Tag in der Container-Registry existiert, aus der du die Daten abrufst.

Wenn deine Aufgabe ein Bild aus einem anderen Registry als Amazon ECR abruft und deiner Aufgabe Informationen fehlen, erhältst du eine andere Fehlermeldung. Der folgende Fehler tritt auf, wenn das Bild nicht existiert, das Tag nicht existiert oder du die Anmeldeinformationen nicht angegeben hast:

„Cannotpullcontainererror: Pull-Image-Manifest wurde 1 Mal(e) wiederholt: Fehler beim Auflösen von ref docker.io/library/invalid-name:non-existenttag: Pull-Zugriff verweigert, Repository existiert nicht oder erfordert möglicherweise eine Autorisierung: Servermeldung: unzureichend.“ „_scope: Autorisierung fehlgeschlagen“

Um dieses Problem zu beheben, überprüfe das Feld „Bild“ in deiner Aufgabendefinition. Vergewissere dich, dass das Image im entsprechenden Container-Registry vorhanden ist. Wenn das Image vorhanden ist, stelle sicher, dass du die richtigen Anmeldeinformationen angibst. Weitere Informationen findest du unter Verwendung von Container-Images in Amazon ECS, die nicht von AWS stammen.

Das Bild, auf das in der Aufgabendefinition verwiesen wird, befindet sich in einem anderen Konto

Wenn sich dein Bild in einem anderen Konto befindet, erhältst du möglicherweise die folgende Fehlermeldung:

„Cannotpullcontainererror: pull access denied for 123456789***.dkr.ecr.us-east-1.amazonaws.com/image-name:tag, repository does not exist or may require 'docker login': denied: User: arn:aws:sts::012345678**:assumed-role/role-name/ec2 instance id is not authorized to perform: ecr:BatchGetImage on resource: arn:aws:ecr:us-east-1:123456789*:repository/image-name:tag because no resource-based policy allows the ecr:BatchGetImage action“

Um dieses Problem zu beheben, musst du die Aktion ecr:batchGetImage in den Repository-Richtlinien des Kontos, in dem sich das Bild befindet, zulassen.

Beispiel: Die Instance, die mit deinem Amazon ECS-Cluster verbunden ist, befindet sich in Konto A und die Aufgabendefinition verweist auf ein Bild in Konto B. Die Repository-Richtlinien in Konto B müssen ecr:batchGetImage für die Instance-IAM-Rolle in Konto A zulassen. Du musst auch die kontenübergreifende Berechtigung in der Repository-Richtlinie aktivieren. Bestätige dann, dass die Instance in Konto A das Bild von Konto B abrufen kann. Weitere Informationen findest du unter Wie lasse ich ein sekundäres Konto Bilder in meinem Amazon ECR-Image-Repository übertragen oder abrufen?