Wie kann ich den Amazon ECR-Fehler „CannotPullContainerError: API error“ in Amazon ECS beheben?

Lesedauer: 4 Minute
0

Wenn ich Bilder mit Amazon Elastic Container Registry (Amazon ECR) abrufe, erhalte ich die folgende Fehlermeldung: „CannotPullContainerError: API error.“

Kurzbeschreibung

Sie können diesen Fehler aufgrund eines der folgenden Probleme erhalten:

  • Ihr Starttyp hat keinen Zugriff auf den Amazon-ECR-Endpunkt
  • Ihre Amazon-ECR-Repository-Richtlinie beschränkt den Zugriff auf Repository-Bilder
  • Ihre AWS Identity and Access Management (IAM)-Rolle verfügt nicht über Berechtigungen, um Bilder abzurufen oder zu übertragen
  • Das Bild kann nicht gefunden werden
  • Der Zugriff auf den Amazon Simple Storage Service (Amazon S3) wird durch Ihre Gateway-Endpunktrichtlinie in Amazon Virtual Private Cloud (Amazon VPC) verweigert

Um Bilder abzurufen, muss Amazon ECS mit dem Amazon-ECR-Endpunkt kommunizieren.

Verwenden Sie das AWSSupport-TroubleshootECSTaskFailedToStart Runbook, um Fehler für Amazon-ECS-Aufgaben zu beheben, die nicht gestartet werden können. Befolgen Sie dann die entsprechenden Schritte zur Fehlerbehebung für Ihr Problem.

Behebung

Wichtig:

  • Verwenden Sie das Runbook AWSSupport-TroubleshootECSTaskFailedToStart in derselben AWS-Region, in der sich Ihre ECS-Cluster-Ressourcen befinden.
  • Wenn Sie das Runbook verwenden, müssen Sie die Task-ID verwenden, die zuletzt ausgefallen ist. Wenn die fehlgeschlagene Aufgabe Teil eines Amazon-ECS-Service ist, verwenden Sie die zuletzt ausgefallene 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 Stopped erreicht haben. Durch die Verwendung der zuletzt ausgefallenen Task-ID wird verhindert, dass die Aufgabenstatusbereinigung die Analyse während der Automatisierung unterbricht.

Anweisungen zum Initiieren des Runbooks finden Sie unter AWSSupport-TroubleshootECSTaskFailedToStart. Verwenden Sie auf der Grundlage der Ergebnisse der Automatisierung einen der folgenden manuellen Schritte zur Fehlerbehebung.

Ihr Starttyp hat keinen Zugriff auf den Amazon-ECR-Endpunkt

1.Möglicherweise führen Sie eine Aufgabe mit einem Starttyp von Amazon Elastic Compute Cloud (Amazon EC2) aus und Ihre Container-Instance befindet sich in einem privaten Subnetz. Oder Sie führen möglicherweise eine Aufgabe mit dem AWS-Fargate-Starttyp in einem privaten Subnetz aus. Vergewissern Sie sich in beiden Fällen, dass Ihr Subnetz über eine Route zu einem NAT-Gateway in einer Routing-Tabelle verfügt.

2.Wenn Ihre Aufgabe einen EC2-Starttyp hat und sich Ihre Container-Instance in einem öffentlichen Subnetz befindet, muss die Instance über eine öffentliche IP-Adresse verfügen.

-or-

Wenn Sie eine Aufgabe mit dem Fargate-Starttyp in einem öffentlichen Subnetz ausführen, wählen Sie AKTIVIERT für Automatische Zuweisung öffentlicher IP aus, wenn Sie die Aufgabe starten. Dadurch erhält Ihre Aufgabe ausgehenden Netzwerkzugriff, um ein Bild abzurufen.

3.Konfigurieren Sie den NAT-Gateway in Ihrer VPC, um Anfragen an das Internet weiterzuleiten.
Hinweis: Sie können AWS PrivateLink als Alternative zu einem NAT-Gateway verwenden.

4.Wenn Sie AWS PrivateLink für Amazon ECR verwenden, überprüfen Sie die Konfiguration für die Sicherheitsgruppe, die den VPC-Endpunkten für Amazon ECR zugeordnet ist. Sie müssen eingehenden Datenverkehr über HTTPS (Port 443) innerhalb der Sicherheitsgruppe Ihrer VPC CIDR, Container-Instance oder Fargate-Aufgabe oder -Service zulassen.

5.Vergewissern Sie sich, dass die an Ihre Instance und die Fargate-Aufgabe angehängte Sicherheitsgruppe den ausgehenden Zugriff für Folgendes zulässt: HTTPS an Port 443, DNS (UDP und TCP) an Port 53 und die Netzwerk-Zugriffssteuerungsliste (Netzwerk-ACL) Ihres Subnetzes.

Ihre Amazon-ECR-Repository-Richtlinie beschränkt den Zugriff auf Repository-Bilder

Überprüfen Sie Ihre Amazon-ECR-Repository-Richtlinie auf Einschränkungen beim Zugriff auf das Repository. Das folgende Beispiel für eine Repository-Richtlinie ermöglicht es IAM-Benutzern, Bilder zu übermitteln und abzurufen:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/push-pull-user-1",
          "arn:aws:iam::123456789012:user/push-pull-user-2"
        ]
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

Ihre IAM-Rolle verfügt nicht über die richtigen Berechtigungen zum Abrufen von Bildern

Wenn Sie eine Aufgabe mit einem EC2-Starttyp ausführen, überprüfen Sie die Berechtigungen für die Instance-IAM-Rolle, die dem Instance-Profil zugeordnet ist. Es muss über Berechtigungen für den Zugriff auf das Amazon-ECR-Repository verfügen.

Hinweis: Die von AWS verwaltete Richtlinie AmazonEC2ContainerRegistryReadOnly bietet die minimalen Berechtigungen, die zum Abrufen von Bildern erforderlich sind.

Wenn Sie eine Aufgabe mit einem Fargate-Starttyp ausführen, vergewissern Sie sich, dass die AmazonECSTaskExecutionRolePolicy über die erforderlichen Berechtigungen verfügt.

Das Bild kann nicht gefunden werden

Um den korrekten Bildnamen in der URI zu überprüfen, überprüfen Sie den Bild-Parameter im Abschnitt Containerdefinitionen Ihrer Aufgabendefinition.

Hinweis: Um per Tag abzurufen, verwenden Sie das folgende Bildnamenformat:registry/repository\ [:tag]. Verwenden Sie das Format registry/repository[@digest], um per Digest abzurufen.

Der Amazon-S3-Zugriff wird durch Ihre Amazon-VPC-Gateway-Endpunktrichtlinie verweigert

Wenn Sie in der Routing-Tabelle eine Route zu einem Amazon-VPC-Gateway-Endpunkt für Amazon S3 haben, gehen Sie wie folgt vor:

1.Überprüfen Sie die Zugriffsrichtlinie des Amazon-VPC-Gateway-Endpunkts.

2.Vergewissern Sie sich, dass der Amazon-VPC-Gateway-Endpunkt über die richtige Richtlinie für den Zugriff auf den S3-Bucket verfügt.

Ähnliche Informationen

CannotPullContainer-Aufgabenfehler