Como resolvo erros “CannotPullContainerError” ao iniciar uma tarefa do EC2 no Amazon ECS?

6 minuto de leitura
0

Quando eu inicio uma tarefa do Amazon Elastic Compute Cloud (Amazon EC2) no Amazon Elastic Container Service (Amazon ECS), recebo o erro “CannotPullContainerError”.

Breve descrição

O CannotPullContainerError ocorre pelos seguintes motivos:

  • Uma tarefa do tipo de inicialização do Amazon EC2 não pode extrair a imagem porque você configurou a rede incorretamente.
  • Seu perfil do AWS Identity and Access Management (AWS IAM) não tem as permissões para extrair a imagem.
  • Você atingiu a cota de taxa do DockerHub.
  • O nome ou a tag da imagem não existe.
  • A definição da tarefa faz referência a uma imagem que está em uma conta diferente da AWS.

Resolução

Usar o runbook AWSSupport-TroubleshootECSTaskFailedToStart para solucionar problemas

Use o runbook AWSSupport-TroubleshootECSTaskFailedToStart para solucionar as tarefas do Amazon ECS que falham ao iniciar. Ao usar o runbook, você deve usar o ID de tarefa que apresentou falha mais recentemente. Se a tarefa com falha fizer parte do serviço Amazon ECS, use a tarefa que falhou mais recentemente no serviço. A tarefa com falha deve estar visível em ECS:DescribeTasks durante a execução da automação. Por padrão, as tarefas do Amazon ECS ficam visíveis por 1 hora após entrarem no estado Interrompido.

Para iniciar o runbook, consulte AWSSupport-TroubleshootECSTaskFailedToStart. Com base na saída da automação, use uma das seguintes resoluções.

Importante: use o runbook AWSSupport-TroubleshootECSTaskFailedToStart na mesma região AWS em que seus recursos de cluster do Amazon ECS estão localizados.

Sua configuração de rede de instância de contêiner do Amazon ECS está incorreta

Se sua instância de contêiner do Amazon ECS não tiver uma conexão com a Internet, ela não poderá acessar o endpoint do Amazon Elastic Container Registry (Amazon ECR). Sem uma conexão com o endpoint, a instância não pode extrair a imagem. Para verificar se sua instância de contêiner do Amazon ECS tem acesso à Internet, execute as seguintes ações:

Seu perfil do IAM não tem as permissões para extrair imagens

Confirme se o perfil do IAM da instância associado ao perfil de instância tem permissões para acessar o repositório do Amazon ECR.

Observação: a política gerenciada pela AWS AmazonEC2ContainerRegistryReadOnly fornece as permissões mínimas necessárias para extrair imagens.

O limite da taxa de tração do DockerHub foi atingido

Se você estiver tentando extrair uma imagem do DockerHub e atingir a cota da taxa de extração, receberá a seguinte mensagem de erro:

“CannotPullContainerError: a inspeção da imagem foi repetida 5 vezes: httpReaderSeeker: falha na abertura: código de status inesperado https://registry-1.docker.io/v2/manifests/sha256:2bb501e6429 Muitas solicitações - Mensagem do servidor: toomanyrequests:”

Para resolver esse problema, consulte Como resolvo o erro “CannotPullContainerError: Você atingiu seu limite de taxa de extração” no Amazon ECS?

O nome ou a tag da imagem não existe

Se você definir uma imagem ou tag hospedada no Amazon ECR, mas a imagem ou tag não existir, você receberá a seguinte mensagem de erro:

“Cannotpullcontainererror: pull image manifesto foi repetido 1 vez (es): falha ao resolver o ref 123456789.dkr. ecr.ap-southeast-2.amazonaws.com/image-name:tag: 123456789**.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: não encontrado**”

Para resolver esse problema, verifique se o campo de imagem tem o valor correto na definição da tarefa. Confirme se o repositório correspondente e a tag estão presentes no registro do contêiner do qual você está obtendo.

Se sua tarefa extrair uma imagem de um registro diferente do Amazon ECR e sua tarefa não tiver informações, você receberá um erro diferente. O erro a seguir ocorre quando a imagem não existe, a tag não existe ou se você não forneceu as credenciais do registro:

“Cannotpullcontainererror: pull image manifesto foi repetido 1 vez (es): falha ao resolver ref docker.io/library/invalid-name:non-existenttag: acesso de extração negado, o repositório não existe ou pode exigir autorização: mensagem do servidor: insufficient_scope: falha na autorização”

Para resolver esse problema, verifique o campo de imagem na definição da sua tarefa. Confirme se a imagem existe no registro de contêiner correspondente. Se a imagem existir, certifique-se de fornecer as credenciais corretas. Para obter mais informações, consulte Como usar imagens de contêiner que não são da AWS no Amazon ECS.

A imagem referenciada na definição da tarefa está em uma conta diferente

Se sua imagem estiver em uma conta diferente, você poderá receber a seguinte mensagem de erro:

“Cannotpullcontainererror: acesso de extração negado para 123456789***.dkr.ecr.us-east-1.amazonaws.com/image-name:tag, o repositório não existe ou pode exigir ‘docker login’: negado: Usuário: arn:aws:sts::012345678**:assumed-role/role-name/ec2 instance id não está autorizado a executar: ecr:BatchGetImage no recurso: arn:aws:ecr:us-east-1:123456789*:repository/image-name:tag porque nenhuma política baseada em recursos permite a ação ecr:BatchGetImage action”

Para resolver esse problema, você deve permitir a ação ecr:batchGetImage nas políticas do repositório na conta em que a imagem está localizada.

Por exemplo, a instância associada ao cluster do Amazon ECS está na Conta A e a definição da tarefa faz referência a uma imagem na Conta B. As políticas do repositório na Conta B devem permitir ecr:BatchGetImage para o perfil do IAM da instância na Conta A. Você também deve ativar a permissão entre contas na política do repositório. Em seguida, confirme se a instância na Conta A pode extrair a imagem da Conta B. Para mais informações, consulte Como faço para permitir que uma conta secundária envie ou extraia imagens no meu repositório de imagens do Amazon ECR?