Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
Wie löse ich Amazon ECS-Aufgaben, die keine Bilder von Amazon ECR abrufen können?
Ich kann in einer Amazon Elastic Container Service (Amazon ECS)-Aufgabe keine Bilder aus Amazon Elastic Container Registry (Amazon ECR) abrufen. Oder ich erhalte die Meldung „CannotPullContainerError: API error“.
Kurzbeschreibung
Möglicherweise erhältst du den Fehler CannotPullContainerError aus den folgenden Gründen:
- Du verwendest ein privates Subnetz ohne Verbindung zum Internet, sodass dein Starttyp keinen Zugriff auf den Amazon ECR-Endpunkt hat.
- Deine Amazon-ECR-Repository-Richtlinie beschränkt den Zugriff auf Repository-Bilder.
- Deine Amazon ECS-Aufgabenausführung oder Instance-Rolle hat nicht die richtigen Berechtigungen zum Abrufen von Bildern.
- Der angeforderte Bild-URI existiert nicht.
- Der Speicherplatz deiner Festplatte reicht nicht für das Bild aus.
- Du hast das Pull-Rate-Kontingent überschritten.
- Es gibt einen fehlenden Netzwerkpfad zwischen deiner Aufgabe und dem Amazon ECR-Endpunkt.
- Deine Docker-Anmeldeinformationen sind veraltet.
Lösung
Die Ursache des Problems ermitteln
Verwende das Runbook AWSSupport-TroubleshootECSTaskFailedToStart, um das Problem zu ermitteln. Du musst das Runbook in derselben AWS-Region ausführen, in der sich deine Amazon ECS-Cluster-Ressourcen befinden. Verwende außerdem die zuletzt fehlgeschlagene Aufgaben-ID. 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 gestoppte ECS-Aufgaben 1 Stunde lang sichtbar, nachdem sie den Status Angehalten erreicht haben.
Verwende auf der Grundlage der Ergebnisse der Automatisierung einen der folgenden manuellen Schritte zur Fehlerbehebung.
Sicherstellen, dass dein privates Subnetz eine Route zu einem NAT-Gateway hat, oder PrivateLink verwenden
Du kannst ein privates Subnetz verwenden, um eine Aufgabe mit einem Amazon Elastic Compute Cloud (Amazon EC2)- oder AWS Fargate-Starttyp auszuführen. Stelle bei beiden Starttypen sicher, dass das private Subnetz eine Route zu einem NAT-Gateway in der Routing-Tabelle hat. Konfiguriere den NAT-Gateway in deiner VPC, um Anfragen an das Internet weiterzuleiten.
Oder du verwendest AWS PrivateLink mit Amazon ECR Virtual Private Cloud (VPC)-Endpunkten und Amazon Simple Storage Service (Amazon S3)-Gateway-Endpunkten.
Die VPC-Endpunkt-Sicherheitsgruppe muss eingehende Verbindungen auf Port 443 aus dem privaten Subnetz oder der Amazon ECS-Aufgaben-VPC zulassen.
Hinweis: Der Wert ECS_IMAGE_PULL_INACTIVITY_TIMEOUT ist in Windows auf einen Standardwert von 3 Minuten eingestellt. Wenn du ein großes Bild abrufst, kann es sein, dass der Bildabruf nicht innerhalb der 3-Minuten-Frist abgeschlossen wird und die Anfrage abläuft.
Deine Amazon ECR-Repository-Richtlinie überprüfen
Wenn deine Amazon ECR-Repository-Richtlinie den Zugriff auf Repository-Bilder einschränkt, erhältst du einen 403 Forbidden-Fehler. Überprüfe deine Amazon ECR-Repository-Richtlinie, um sicherzustellen, dass es keine Beschränkungen für die Repository-Bilder gibt. Beispiele für Zugriffsrichtlinien findest du unter Beispiele für private Repository-Richtlinien in Amazon ECR.
Die Berechtigungen deiner IAM-Rolle für die Aufgabenausführung oder die Container-Instance überprüfen
Wenn du den Amazon EC2-Starttyp verwendest, stelle sicher, dass die AWS Identity and Access Management (IAM)-Rolle der Container-Instance die Berechtigung zum Zugriff auf das Amazon ECR-Repository hat. Die Richtlinie AmazonEC2ContainerRegistryReadOnly bietet die minimal erforderlichen Berechtigungen zum Abrufen von Bildern.
Wenn du den Fargate-Starttyp verwendest, stelle sicher, dass die AmazonECSTaskExecutionRolePolicy an die Aufgabenausführungsrolle angehängt ist, um ein Bild abzurufen.
Sicherstellen, dass du den richtigen Bild-URI verwendest
Um sicherzustellen, dass du den korrekten Bildnamen im URI verwendest, überprüfe den Bild-Parameter im Abschnitt Containerdefinitionen deiner Aufgabendefinition.
Hinweis: Verwende zum Abrufen nach Tag das Bildnamenformat registry/repository[:tag]. Verwende zum Abrufen per Digest das Format registry/repository[@digest], das du direkt aus dem Amazon ECR-Repository kopieren kannst.
Deinen Speicherplatz überprüfen
Wenn der Speicherplatz nicht ausreicht, um das abgerufene Bild zu speichern, erhältst du die Fehlermeldung „CannotPullContainerError: no space left on device“. Um dieses Problem zu beheben, siehewrite /var/lib/docker/tmp/GetImageBlob111111111: no space left on device.
Prüfen, ob du das Pull-Rate-Kontingent überschritten hast
Wenn du Docker Hub verwendest, um das Bild abzurufen, und das Kontingent Bildabruf überschreitest, erhältst du die Fehlermeldung „CannotPullContainerError: toomanyrequests: You have reached your pull rate limit“. Informationen zu Pull-Rate-Kontingenten findest du unter Pull-Rate-Limit auf der Docker-Docs-Website. Um dieses Problem zu beheben, siehe ERROR: toomanyrequests: Too Many Requests or You have reached your pull rate limit.
Deine Netzwerkkonfiguration überprüfen
Wenn es einen fehlenden Netzwerkpfad zwischen deiner Aufgabe und dem Amazon ECR-Endpunkt gibt, erhältst du eine Fehlermeldung, die den folgenden Beispielen ähnelt:
„Cannotpullcontainererror: error response from daemon“
-oder-
„Client.Timeout exceeded while awaiting headers“
Prüfe, ob deine Aufgabe über ein NAT-Gateway oder PrivateLink Zugriff auf das Amazon ECR-Repository hat, um dieses Problem zu lösen.
Wenn du einen Amazon ECS-Service erstellst, konfiguriere die folgenden Einstellungen unter Netzwerk:
- Aktiviere für Aufgaben in öffentlichen Subnetzen unter Öffentliche IP die Option Öffentliche IP-Adresse automatisch zuweisen.
- Deaktiviere für Aufgaben in privaten Subnetzen Öffentliche IP-Adresse automatisch zuweisen und konfiguriere dann ein NAT-Gateway oder PrivateLink.
Deine Docker-Anmeldeinformationen aktualisieren
Wenn deine Docker-Anmeldeinformationen veraltet sind, erhältst du die Fehlermeldung „repository does not exist or may require 'docker login'“. Wie du deine Docker-Anmeldeinformationen für die private Repository-Authentifizierung aktualisieren kannst, findest du unter Verwendung eines Autorisierungs-Tokens.
Ähnliche Informationen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 9 Monaten
- AWS OFFICIALAktualisiert vor einem Monat
- AWS OFFICIALAktualisiert vor 3 Jahren