Ir para o conteúdo

Como soluciono um erro “exec format” que faz com que minhas tarefas do Amazon ECS falhem?

3 minuto de leitura
0

Quero resolver o erro “exec format” que faz com que minhas tarefas do Amazon Elastic Container Service (Amazon ECS) falhem.

Breve descrição

Esse erro ocorre quando as tarefas executadas para uma imagem de contêiner são criadas para uma arquitetura diferente para suas instâncias do Amazon Elastic Compute Cloud (Amazon EC2). Por exemplo, se você criou uma imagem de contêiner em uma instância baseada em ARM e depois tentou executar a tarefa em uma instância x86.

Observação: A tarefa tem o motivo de parada "Essential container in task exited" e um código de saída 1.

Resolução

Para resolver esse problema, altere a arquitetura de suas tarefas do Amazon ECS ou reconstrua a imagem para a arquitetura correta.

Mude a arquitetura de suas tarefas do ECS

A arquitetura de uma tarefa é determinada pelo parâmetro cpuArchitecture na definição da tarefa. Os valores válidos são x86_64 e ARM64 com x86_64 como valor padrão.

Para alterar a arquitetura usada para iniciar tarefas, crie uma nova revisão da definição da tarefa com o parâmetro cpuArchitecture definido com o valor desejado. Se as tarefas fizerem parte de um serviço, use a arquitetura revisada para atualizar o serviço e realizar uma implantação para iniciar novas tarefas.

Para os tipos de execução do Fargate, a AWS provisiona automaticamente a infraestrutura com a arquitetura correta para executar a tarefa. Se você usa instâncias do EC2 ou instâncias externas como seu tipo de inicialização, você deve gerenciar a capacidade da sua configuração. Para obter mais informações, consulte Gerenciamento de capacidade.

Recrie a imagem para obter a arquitetura correta

Use a mesma arquitetura especificada na definição da tarefa para recriar a imagem do contêiner.

Observação: A maioria das ferramentas de criação de imagens de contêiner usa como padrão a arquitetura da máquina host.

Use Docker ou Finch

Adicione o parâmetro --platform ao comando de criação para definir a arquitetura de destino. Por exemplo, o Docker build --platform linux/arm64 [...] cria uma imagem para ARM64. O Finch build --plaform linux/amd64 [...] constrói uma imagem para a arquitetura x86/64.

Exemplo de comando de criação:

docker build -t my-image --platform linux/arm64

Para obter mais informações sobre o cliente de linha de comandos Finch, consulte Introducing Finch: An Open Source Client for Container Development (Apresentando o Finch: Um cliente de código aberto para desenvolvimento de contêineres).

Para obter mais informações sobre como criar imagens do Docker, consulte Building multi-platform images (Criação de imagens multiplataforma) no site do Docker.

AWS CDK

Use a imagem ecs.ContainerImage.fromAsset do AWS Cloud Development Kit (AWS CDK) para criar e fazer upload de uma imagem de um arquivo Docker em seu diretório de origem. Para mais informações, consulte Images.

CodeBuild

Também é possível usar o AWS CodeBuild com imagens do Docker para configurar a arquitetura. Para obter mais informações, consulte Modos e tipos de computação do ambiente de compilação.

AWS OFICIALAtualizada há 2 anos