CannotPullContainer task errors - Amazon ECS

CannotPullContainer task errors

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 eigenständigen 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 in Ihrer Containerdefinition ein Amazon ECR-Image festlegen, müssen Sie den vollständigen URI Ihres ECR-Repositorys sowie den 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.

Nicht genügend Speicherplatz

Wenn das Stamm-Volume Ihrer Container-Instance nicht über ausreichend Speicherplatz verfügt, wenn das Container-Abbild 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 mit dem folgenden Befehl die 20 größten Dateien auf Ihrem Dateisystem abrufen:

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" } }

Wenn Ihre Container-Protokolle zu viel Speicherplatz belegen, können Sie alternativ auch den Protokolltreiber awslogs verwenden. Der Protokolltreiber awslogs sendet die Protokolle an CloudWatch. Dadurch wird Speicherplatz freigegeben, der andernfalls von den Container-Protokollen auf der Container-Instance belegt sein 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:

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