Comment puis-je résoudre les erreurs « CannotPullContainerError » lorsque je lance une tâche EC2 dans Amazon ECS ?

Lecture de 6 minute(s)
0

Lorsque je lance une tâche Amazon Elastic Compute Cloud (Amazon EC2) dans Amazon Elastic Container Service (Amazon ECS), le message d'erreur « CannotPullContainerError » s'affiche.

Brève description

L'erreur CannotPullContainerError se produit pour les raisons suivantes :

  • Une tâche de type lancement Amazon EC2 ne peut pas extraire l'image car vous avez incorrectement configuré le réseau.
  • Votre rôle Gestion des identités et des accès AWS (AWS IAM) ne dispose pas des autorisations nécessaires pour extraire l’image.
  • Vous avez atteint votre quota de taux DockerHub.
  • Le nom ou l’identification de l’image n’existe pas.
  • La définition de tâche fait référence à une image qui se trouve dans un autre compte AWS.

Résolution

Utiliser le dossier d’exploitation AWSSupport-TroubleshootECSTaskFailedToStart pour résoudre les problèmes

Utilisez le dossier d'exploitation AWSSupport-TroubleshootECSTaskFailedToStart pour résoudre les échecs de démarrage des tâches Amazon ECS. Lorsque vous exécutez le dossier d’exploitation, vous devez utiliser également le dernier ID de tâche qui a échoué. Si la tâche ayant échoué fait partie du service Amazon ECS, utilisez la dernière tâche ayant échoué dans le service. La tâche ayant échoué doit être visible dans ECS:DescribeTasks pendant l’automatisation. Par défaut, les tâches Amazon ECS sont visibles pendant 1 heure après leur passage à l'état Arrêté.

Pour lancer le dossier d’exploitation, consultez la section AWSSupport-TroubleshootECSTaskFailedToStart. En fonction du résultat de l'automatisation, utilisez l'une des résolutions suivantes.

Important : Utilisez le dossier d’exploitation AWSSupport-TroubleshootECSTaskFailedToStart dans la même région AWS où sont situées les ressources de votre cluster Amazon ECS.

La configuration réseau de votre instance de conteneur Amazon ECS est incorrecte

Si votre instance de conteneur Amazon ECS ne dispose pas d’une connexion Internet, elle ne peut pas accéder au point de terminaison Amazon Elastic Container Registry (Amazon ECR). Sans connexion au point de terminaison, l’instance ne peut pas extraire l’image. Pour vérifier que votre instance de conteneur Amazon ECS dispose d'un accès à Internet, effectuez les actions suivantes :

Votre rôle IAM ne dispose pas d’autorisations pour extraire des images

Vérifiez que le rôle IAM d’instance associé au profil d’instance est autorisé à accéder au référentiel Amazon ECR.

Remarque : La politique gérée par AWS AmazonEC2ContainerRegistryReadOnly fournit les autorisations minimales requises pour extraire des images.

La limite de taux d’extraction de DockerHub est atteinte

Si vous essayez d’extraire une image depuis DockerHub et que vous avez atteint votre quota de taux d’extraction, le message d’erreur suivant s’affiche :

« 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: »

Pour résoudre ce problème, consultez la section Comment puis-je résoudre l'erreur « CannotPullContainerError : You have reached your pull rate limit » dans Amazon ECS ?

Le nom ou l’identification de l’image n’existe pas

Si vous définissez une image ou une identification hébergée dans Amazon ECR mais que l'image ou l’identification n'existe pas, le message d'erreur suivant s'affiche :

« 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*\ »

Pour résoudre ce problème, vérifiez que la valeur du champ image est correcte dans votre définition de tâche. Vérifiez que le référentiel et l’identification correspondants existent dans le registre de conteneurs à partir duquel vous effectuez l’extraction.

Si votre tâche extrait une image d’un registre autre qu’Amazon ECR et que des informations sont manquantes dans votre tâche, une erreur différente s’affiche. L’erreur suivante se produit si l’image ou l’identification n’existe pas, ou si les informations d’identification du registre ne sont pas fournies :

« Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref docker.io/library/invalid-name:non-existenttag: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed »

Pour résoudre ce problème, vérifiez le champ d’image dans votre définition de tâche. Assurez-vous que l’image existe dans le registre de conteneurs correspondant. Si l’image existe, veillez à fournir les informations d’identification correctes. Pour plus d'informations, consultez la section Utilisation d'images de conteneur non AWS dans Amazon ECS.

L'image référencée dans la définition de tâche se trouve dans un autre compte

Si votre image se trouve dans un autre compte, le message d'erreur suivant peut s'afficher :

« 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 »

Pour résoudre ce problème, vous devez autoriser l'action ecr:batchGetImage dans les politiques de référentiel du compte dans lequel se trouve l'image.

Par exemple, l'instance associée à votre cluster Amazon ECS se trouve dans le compte A et la définition de tâche fait référence à une image dans le compte B. Les politiques de référentiel du compte B doivent autoriser ecr:batchGetImage pour le rôle IAM de l'instance dans le compte A. Vous devez également activer l'autorisation intercompte dans la politique de référentiel. Puis, vérifiez que l'instance du compte A peut extraire l'image du compte B. Pour plus d'informations, consultez la section Comment autoriser un compte secondaire à envoyer ou extraire des images dans mon référentiel d'images Amazon ECR ?