CannotPullContainer -Aufgabenfehler - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CannotPullContainer -Aufgabenfehler

Die folgenden Fehler geben an, dass das angegebene Container-Image beim Erstellen einer Aufgabe nicht abgerufen werden konnte.

Anmerkung

Die 1.4 Fargate Plattformversion schneidet lange Fehlermeldungen ab.

Zeitüberschreitung für die Verbindung

Wenn eine Fargate-Aufgabe gestartet wird, benötigt ihre Elastic-Network-Schnittstelle eine Route zum Internet, um Container-Images abrufen zu können. Wenn Sie beim Starten einer Aufgabe eine ähnliche Fehlermeldung wie die folgende erhalten, liegt dies daran, dass keine Route zum Internet existiert:

CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection"

Um dieses Problem zu lösen, können Sie:

  • Für Aufgabe in öffentlichen Subnetzen geben Sie beim Starten der Aufgabe ENABLED unter Auto-assign public IP (Öffentliche IP automatisch zuweisen) an. Weitere Informationen finden Sie unter Ausführen einer Anwendung als Amazon-ECS-Aufgabe.

  • Für Aufgaben in privaten Subnetzen geben Sie beim Starten der Aufgabe DISABLED (DEAKTIVIERT) für Auto-assign public IP (Öffentliche IP automatisch zuweisen) an und konfigurieren ein NAT-Gateway in Ihrer VPC, um Anforderungen an das Internet weiterzuleiten. Weitere Informationen finden Sie unter NAT-Gateways im Amazon VPC-Benutzerhandbuch.

Kontext abgebrochen

Die häufige Ursache für diesen Fehler liegt darin, dass die von Ihrer Aufgabe verwendete VPC über keine Route zum Abrufen des Container-Images von Amazon ECR verfügt.

Image nicht gefunden

Wenn Sie ein Amazon-ECR-Image in Ihrer Containerdefinition angeben, müssen Sie den vollständigen URI Ihres Amazon-ECR-Repositorys zusammen mit dem Image-Namen in diesem Repository verwenden. Wenn das Repository oder Image nicht gefunden wird, erhalten Sie die folgende Fehlermeldung:

CannotPullContainerError: API error (404): repository 111122223333.dkr.ecr.us-east-1.amazonaws.com/<repo>/<image> not found

Um diesen Fehler zu beheben, überprüfen Sie den Repository-URI und den Image-Namen. Stellen Sie außerdem sicher, dass Sie mit der IAM-Rolle für die Aufgabenausführung den korrekten Zugriff eingerichtet haben. Weitere Informationen zur Aufgabenausführungsrolle finden Sie unter IAM-Rolle für die Amazon-ECS-Aufgabenausführung.

Verbindungsproblem mit dem Amazon-ECR-Endpunkt

Wenn Sie versuchen, ein Amazon-ECR-Image abzurufen und nicht über die richtigen Berechtigungen für den Amazon-ECR-Endpunkt verfügen, wird ein Fehler ähnlich dem folgenden angezeigt:

CannotPullContainerError: API error

Um dieses Problem zu lösen, muss Amazon ECS mit dem Amazon-ECR-Endpunkt kommunizieren. Informationen zur Behebung dieser Probleme finden Sie unter Wie kann ich den Amazon-ECR-Fehler „CannotPullContainerError: API-Fehler“ in Amazon ECS beheben? auf der - AWS Support Website.

Nicht genügend Speicherplatz

Wenn das Stamm-Volume Ihrer Container-Instance nicht über ausreichend Speicherplatz verfügt, wenn das Container-Image abgerufen wird, wird eine Fehlermeldung wie die folgende angezeigt:

CannotPullContainerError: write /var/lib/docker/tmp/GetImageBlob111111111: no space left on device

Um dieses Problem zu lösen, müssen Sie Speicherplatz freigeben.

Wenn Sie das Amazon-ECS-optimierte AMI verwenden, können Sie den folgenden Befehl verwenden, um die 20 größten Dateien auf Ihrem Dateisystem abzurufen:

du -Sh / | sort -rh | head -20

Beispielausgabe:

5.7G    /var/lib/docker/containers/50501b5f4cbf90b406e0ca60bf4e6d4ec8f773a6c1d2b451ed8e0195418ad0d2
1.2G    /var/log/ecs
594M    /var/lib/docker/devicemapper/mnt/c8e3010e36ce4c089bf286a623699f5233097ca126ebd5a700af023a5127633d/rootfs/data/logs
...

Ähnlich wie im obigen Beispiel kann das Stamm-Volume in einigen Fällen von einem ausgeführten Container ausgefüllt sein. Wenn der Container den Standardprotokolltreiber json-file ohne eine max-size-Beschränkung verwendet, kann die Protokolldatei einen Großteil des Speicherplatzes belegen. Mit dem Befehl docker ps können Sie überprüfen, welcher Container den Speicherplatz belegt. Hierzu wird der Verzeichnisname aus der Ausgabe oben der Container-ID zugewiesen. Zum Beispiel:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50501b5f4cbf amazon/amazon-ecs-agent:latest "/agent" 4 days ago Up 4 days ecs-agent

Bei Verwendung des Protokolltreibers json-file erfasst Docker standardmäßig die Standardausgabe (und Standardfehler) aller Container und schreibt diese in Dateien im JSON-Format. Sie können max-size als Protokolltreiberoption festlegen, was vermeidet, dass die Protokolldatei zu groß wird. Weitere Informationen finden Sie unter Configure logging drivers in der Docker-Dokumentation.

Nachfolgend finden Sie einen Ausschnitt aus einer Containerdefinition mit dieser Option:

{ "log-driver": "json-file", "log-opts": { "max-size": "256m" } }

Eine Alternative, wenn Ihre Containerprotokolle zu viel Speicherplatz beanspruchen, ist die Verwendung des awslogs Protokolltreibers. Der awslogs Protokolltreiber sendet die Protokolle an CloudWatch, wodurch der Festplattenspeicher freigegeben wird, der andernfalls für Ihre Containerprotokolle auf der Container-Instance verwendet würde. Weitere Informationen finden Sie unter Verwenden des awslogs-Protokolltreibers.

Beschränkung der Docker-Hub-Rate

Wenn eine der folgenden Fehlermeldungen angezeigt wird, treffen Sie wahrscheinlich die Tarifbeschränkungen des Docker-Hubs:

ERROR: toomanyrequests: Too Many Requests.
You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits.

Weitere Informationen über die Docker-Hub-Ratenlimits finden Sie unter Grundlegendes zur Begrenzung der Docker-Hub-Rate.

Wenn Sie das Docker-Hub-Ratenlimit erhöht haben und Sie Ihre Docker-Pulls für Ihre Container-Instances authentifizieren müssen, finden Sie weitere Informationen unter Private Registrierungsauthentifizierung für Container-Instances im Entwicklerhandbuch zu Amazon Elastic Container Service.

Image konnte nicht kopiert werden

Wenn Sie beim Starten einer Aufgabe eine ähnliche Fehlermeldung wie die folgende erhalten, liegt dies daran, dass kein Zugriff auf das Image existiert:

CannotPullContainerError: ref pull has been retried 1 time(s): failed to copy: httpReaderSeeker: failed open: unexpected status code

Um dieses Problem zu lösen, können Sie:

Abruf-Zugriff verweigert

Wenn Sie beim Starten einer Aufgabe eine ähnliche Fehlermeldung wie die folgende erhalten, liegt dies daran, dass kein Zugriff auf das Image existiert:

CannotPullContainerError: pull access denied

Um dieses Problem zu beheben, müssen Sie Ihren Docker-Client möglicherweise mit Amazon ECR authentifizieren. Weitere Informationen finden Sie unter Private Registrierungsauthentifizierung im Amazon-ECR-Benutzerhandbuch.

Ungültige Speicheradresse oder Nullzeiger-Dereferenzierung

Wenn Sie beim Starten einer Aufgabe eine ähnliche Fehlermeldung wie die folgende erhalten, liegt dies daran, dass kein Zugriff auf das Image existiert:

CannotPullContainerError: containerd: pull command failed: panic: runtime error: invalid memory address or nil pointer dereference

So beheben Sie dieses Problem

  • Vergewissern Sie sich, dass Sie über die Sicherheitsgruppenregeln verfügen, um Amazon S3 zu erreichen.

  • Wenn Sie Gateway-Endpunkte verwenden, müssen Sie der Routing-Tabelle eine Route hinzufügen, um auf den Endpunkt zuzugreifen.

Fehler beim Abrufen der Image-Konfiguration

Wenn Sie beim Starten einer Aufgabe eine ähnliche Fehlermeldung wie die folgende erhalten, liegt das daran, dass ein Ratenlimit erreicht wurde oder ein Netzwerkfehler vorliegt:

CannotPullContainerError: error pulling image conf/error pulling image configuration

Informationen zum Beheben dieses Problems finden Sie unter Wie kann ich den Fehler „CannotPullContainerError“ in meiner Amazon-ECS-EC2-Starttypaufgabe beheben.

Weitere Informationen zu STOPPED-Fehlern finden Sie unter Angehaltene-Aufgaben-Fehlercodes im Benutzerhandbuch zu Amazon Elastic Container Service für AWS Fargate.