Como resolvo tarefas do Amazon ECS que não conseguem extrair imagens do Amazon ECR?

5 minuto de leitura
0

Não consigo extrair imagens do Amazon Elastic Container Registry (Amazon ECR) em uma tarefa do Amazon Elastic Container Service (Amazon ECS). Ou recebo a mensagem “CannotPullContainerError: erro de API¨.

Breve descrição

Você pode receber o erro CannotPullContainerError pelos seguintes motivos:

  • Você usa uma sub-rede privada sem rota para a internet, portanto, seu tipo de inicialização não tem acesso ao endpoint do Amazon ECR.
  • Sua política de repositório do Amazon ECR restringe o acesso às imagens do repositório.
  • Sua execução de tarefas ou função de instância do Amazon ECS não tem as permissões corretas para extrair imagens.
  • O URI da imagem solicitada não existe.
  • Não há espaço suficiente no disco para a imagem.
  • Você excedeu a cota da taxa de extração.
  • Falta um caminho de rede entre sua tarefa e o endpoint do Amazon ECR.
  • Suas credenciais do Docker estão desatualizadas.

Resolução

Determine a causa do problema

Use o runbook AWS Support-TroubleshootECSTaskFailedToStart para determinar o problema. Use o runbook na mesma região AWS em que seus recursos de cluster do Amazon ECS estão localizados. Além disso, use o ID da tarefa que falhou 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 interrompidas do ECS ficam visíveis por 1 hora após entrarem no estado Interrompido.

Com base na saída da automação, use uma das seguintes etapas manuais de solução de problemas.

Certifique-se de que sua sub-rede privada tenha uma rota para um gateway NAT ou use o PrivateLink

É possível usar uma sub-rede privada para executar uma tarefa com um tipo de inicialização do Amazon Elastic Compute Cloud (Amazon EC2) ou do AWS Fargate. Para ambos os tipos de inicialização, certifique-se de que a sub-rede privada tenha uma rota para um gateway NAT na tabela de rotas. Configure o gateway NAT em sua VPC para encaminhar solicitações para a internet.

Ou use o AWS PrivateLink com endpoints de nuvem privada virtual (VPC) do Amazon ECR e endpoints de gateway do Amazon Simple Storage Service (Amazon S3).

O grupo de segurança de endpoints da VPC deve permitir conexões de entrada na porta 443 a partir da sub-rede privada ou da VPC de tarefas do Amazon ECS.

Observação: o valor ECS_IMAGE_PULL_INACTIVITY_TIMEOUT no Windows está definido como padrão de 3 minutos. Se você estiver extraindo uma imagem grande, a extração da imagem poderá não ser concluída no período de 3 minutos e a solicitação expirará.

Verifique sua política de repositório do Amazon ECR

Se sua política de repositório do Amazon ECR restringir o acesso às imagens do repositório, você receberá um erro 403 Proibido. Verifique sua política de repositório do Amazon ECR para garantir que não haja restrições nas imagens do repositório. Para obter exemplos de políticas de acesso, consulte Exemplos de políticas de repositórios privados no Amazon ECR.

Verifique as permissões da execução da tarefa ou do perfil do IAM da instância de contêiner

Se você usar o tipo de inicialização do Amazon EC2, certifique-se de que o perfil do AWS Identity and Access Management (IAM) da instância de contêiner tenha permissão para acessar o repositório do Amazon ECR. A política AmazonEC2ContainerRegistryReadOnly fornece as permissões mínimas necessárias para extrair imagens.

Se você usar o tipo de inicialização Fargate, certifique-se de que o AmazonECSTaskExecutionRolePolicy esteja anexado ao perfil de execução da tarefa para extrair uma imagem.

Certifique-se de que você esteja usando a imagem URI correta

Para confirmar o nome correto da imagem no URI, verifique o parâmetro de imagem na seção de definições do contêiner da sua definição de tarefa.

Observação: para extrair por tag, use o formato de nome de imagem registry/repository[:tag]. Para extrair por resumo, use o formato registry/repository[@digest], que é possível copiar diretamente do repositório Amazon ECR.

Verifique seu espaço em disco

Se não houver espaço em disco suficiente para armazenar a imagem que você extrai, você receberá a mensagem de erro “CannotPullContainerError: não há mais espaço restante no dispositivo”. Para resolver esse problema, consulte write /var/lib/docker/tmp/GetImageblob111111111: não há mais espaço no dispositivo.

Verifique se você excedeu a cota da taxa de extração

Se você usar o Docker Hub para extrair a imagem e exceder a cota de extração da imagem, receberá a mensagem de erro: “CannotPullContainerError: toomanyrequests: você atingiu seu limite de taxa de extração”. Para obter informações sobre cotas de pull rate, consulte Limite de pull rate no site Docker Docs. Para resolver esse problema, consulte ERROR: toomanyrequests: muitas solicitações ou Você atingiu seu limite de taxa de extração.

Verifique sua configuração de rede

Se houver um caminho de rede ausente entre sua tarefa e o endpoint do Amazon ECR, você receberá um erro semelhante aos exemplos a seguir:

“Cannotpullcontainererror: resposta de erro do daemon”

-ou-

“Client.Tempo limite excedido enquanto aguardava cabeçalhos¨

Para resolver esse problema, verifique se sua tarefa tem acesso ao repositório Amazon ECR por meio de um gateway NAT ou PrivateLink.

Ao criar um serviço Amazon ECS, configure as seguintes configurações em Rede:

  • Para tarefas em sub-redes públicas, em IP público, ative a Atribuição automática de IP público.
  • Para tarefas em sub-redes privadas, desative a Atribuição automática de IP público e configure um gateway NAT ou PrivateLink.

Atualize suas credenciais de login do Docker

Se suas credenciais do Docker estiverem desatualizadas, você receberá a mensagem de erro “o repositório não existe ou pode exigir 'login do docker'”. Para atualizar suas credenciais de login do Docker para autenticação de repositório privado, consulte Usando um token de autorização.

Informações relacionadas

Erros da tarefa CannotPullContainer no Amazon ECS