Wie behebe ich den Fehler „CannotPullContainerError“, wenn ich eine EC2-Aufgabe in Amazon ECS starte?
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:
- Stelle sicher, dass deine Instances entweder über ein Internet-Gateway oder ein NAT-Gateway auf das Internet zugreifen können. Informationen zur Behebung von NAT-Gateway-Verbindungsproblemen findest du unter Warum kann meine Amazon-EC2-Instance in einem privaten Subnetz über ein NAT-Gateway keine Verbindung zum Internet herstellen?
Hinweis: Du kannst AWS PrivateLink anstelle eines NAT-Gateways verwenden. Stelle sicher, dass du AWS PrivateLink richtig konfigurierst, um Fehler zu vermeiden. - Stelle sicher, dass eingehender HTTPS-Zugriff über Port 443 auf der Ebene der Instance, Sicherheitsgruppe und Netzwerk-Zugriffsteuerungsliste (Netzwerk-ACL) zulässig ist. Informationen zur Behebung von Verbindungsproblemen mit dem Internet-Gateway findest du unter Warum kann meine Amazon EC2-Instance nicht über ein Internet-Gateway auf das Internet zugreifen?
- Wenn du einen Virtual Private Cloud (VPC)-Endpunkt verwendest, um dich mit einem Amazon ECR-Endpunkt zu verbinden, überprüfe die Sicherheitsgruppen deiner Amazon ECS-Container-Instance. Erlaube deiner Amazon ECS-Container-Instance, Datenverkehr an Sicherheitsgruppen für deinen VPC-Endpunkt zu senden.
- Wenn du die Fehlermeldung CannotPullContainerError: API error erhältst: Siehe Wie löse ich Amazon ECS-Aufgaben, die keine Bilder von Amazon ECR abrufen können?
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?

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 4 Monaten
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 17 Tagen