Come posso risolvere gli errori "CannotPullContainerError" quando avvio un'attività EC2 in Amazon ECS?

5 minuti di lettura
0

Quando avvio un'attività Amazon Elastic Compute Cloud (Amazon EC2) in Amazon Elastic Container Service (Amazon ECS), ricevo un errore "CannotPullContainerError".

Breve descrizione

L'errore CannotPullContainerError si verifica per i seguenti motivi:

  • Un'attività con tipo avvio di Amazon EC2 non può estrarre l'immagine perché hai configurato la rete in modo errato.
  • Un ruolo AWS Identity and Access Management (IAM) non dispone delle autorizzazioni per estrarre l'immagine.
  • Hai raggiunto la tua quota tariffaria DockerHub.
  • Il nome o il tag dell'immagine non esiste.
  • La definizione dell'attività fa riferimento a un'immagine che si trova in un account AWS diverso.

Risoluzione

Utilizza il runbook AWSSupport-TroubleshootECSTaskFailedToStart per risolvere i problemi

Utilizza il runbook AWSSupport-TroubleshootECSTaskFailedToStart per risolvere i problemi delle attività Amazon ECS che non vengono avviate. Quando esegui il runbook, devi usare l'ID dell'ultima attività non riuscita. Se l'attività non riuscita fa parte di un servizio Amazon ECS, utilizza l'ultima attività non riuscita del servizio. L'attività non riuscita deve essere visibile in ECS:DescribeTasks durante l'automazione. Per impostazione predefinita, le attività Amazon ECS sono visibili per 1 ora dopo essere entrate nello stato Arrestata.

Per avviare il runbook, consulta AWSSupport-TroubleshootECSTaskFailedToStart. In base all'output dell'automazione, utilizza una delle seguenti risoluzioni.

Importante: utilizza il runbook AWSSupport-TroubleshootECSTaskFailedToStart nella stessa regione AWS in cui si trovano le risorse del cluster Amazon ECS.

La configurazione di rete dell'istanza di container Amazon ECS non è corretta

Se l’istanza di container Amazon ECS non dispone di una connessione Internet, non può raggiungere l'endpoint Amazon Elastic Container Registry (Amazon ECR). Senza una connessione all'endpoint, l'istanza non può estrarre l'immagine. Per verificare che la tua istanza di container Amazon ECS abbia accesso a Internet, esegui le seguenti azioni:

Il ruolo IAM non dispone delle autorizzazioni per estrarre immagini

Verifica che il ruolo IAM dell'istanza associato al profilo dell'istanza disponga delle autorizzazioni per accedere al repository Amazon ECR.

Nota: la policy gestita da AWS AmazonEC2ContainerRegistryReadOnly fornisce le autorizzazioni minime necessarie per estrarre immagini.

È stato raggiunto il limite di pull rate di DockerHub

Se stai cercando di estrarre un'immagine da DockerHub e hai raggiunto la quota di pull rate, ricevi il seguente messaggio di errore:

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

Per risolvere il problema, consulta Come posso risolvere l'errore "CannotPullContainerError: You have reached your pull rate limit" in Amazon ECS?

Il nome o il tag dell'immagine non esiste

Se definisci un'immagine o un tag ospitato in Amazon ECR ma l'immagine o il tag non esiste, ricevi il seguente messaggio di errore:

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

Per risolvere il problema, verifica che il campo immagine abbia il valore corretto nella definizione dell'attività. Verifica che il repository e il tag corrispondenti siano presenti nel registro del container da cui stai effettuando l'estrazione.

Se l’attività estrae un'immagine da un registro diverso da Amazon ECR e non contiene informazioni, si verificherà un errore diverso. L'errore seguente si verifica se l'immagine non esiste, il tag non esiste o non fornisci le credenziali del registro:

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

Per risolvere il problema, controlla il campo immagine nella definizione dell'attività. Verifica che l'immagine esista nel registro del container corrispondente. Se l'immagine esiste, assicurati di fornire le credenziali corrette. Per ulteriori informazioni, consulta Utilizzo di immagini di container non AWS in Amazon ECS.

L'immagine a cui si fa riferimento nella definizione dell'attività si trova in un account diverso

Se l'immagine si trova in un altro account, potresti ricevere il seguente messaggio di errore:

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

Per risolvere il problema, devi consentire l'azione ecr:batchGetImage nelle policy del repository nell'account in cui si trova l'immagine.

Ad esempio, l'istanza associata al cluster Amazon ECS si trova nell'Account A e la definizione dell'attività fa riferimento a un'immagine nell'Account B. Le policy del repository nell'Account B devono consentire ecr:batchGetImage per il ruolo IAM dell'istanza nell'Account A. Devi inoltre attivare l'autorizzazione multi-account nella policy del repository. Quindi verifica che l'istanza nell'Account A possa estrarre l'immagine dall'Account B. Per ulteriori informazioni, consulta Come posso consentire a un account secondario di inviare o estrarre immagini nel mio repository di immagini Amazon ECR?