DevOps Mind
Você está tentando buildar uma imagem no MacOS e se depara com o erro: “WARNING: The requested image’s platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform”? Este é um problema comum enfrentado por desenvolvedores que trabalham com containers Docker em um ambiente MacOS com arquitetura ARM. Neste artigo, vamos explorar as causas desse erro e como resolvê-lo de maneira eficaz.
Tópicos
Erro
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
standard_init_linux.go:228: exec user process caused: exec format error
O erro ocorre durante o uso docker run, por exemplo:
docker run --rm -p 9000:9000 1234567.dkr.ecr.us-east-1.amazonaws.com/devops-mind:laravel-1
Solução
Foi necessário buildar a imagem a partir de uma estação com Linux, ao invés de macOS.
Porém esta solução não é muito prática. Nos próximos tópicos iremos abordar opções mais práticas e efetivas.
Entendendo o Problema
O que Causa o Erro?
O erro ocorre porque o MacOS mais recente usa processadores Apple Silicon (ARM), enquanto muitas imagens Docker são construídas para a arquitetura x86_64 (amd64). Quando você tenta executar uma imagem ARM em um host amd64, o Docker não consegue compatibilizar as plataformas automaticamente.
Por Que Isso é Importante?
Resolver este problema é crucial para garantir que seu ambiente de desenvolvimento esteja alinhado com as práticas de produção e para evitar interrupções no fluxo de trabalho. Além disso, compreender a compatibilidade entre diferentes arquiteturas ajuda a otimizar o uso de containers em diversas plataformas.
Solução para o Erro – does not match the detected host platform (linux/amd64)
Verificando a Arquitetura do Seu Sistema
Antes de tudo, confirme qual é a arquitetura do seu MacOS. Você pode fazer isso usando o seguinte comando no terminal:
uname -m
Este comando retornará arm64
para Apple Silicon e x86_64
para Intel.
Ajustando a Plataforma no Docker
A maneira mais direta de resolver o problema é especificar a plataforma ao buildar ou puxar a imagem Docker. Você pode fazer isso adicionando a flag --platform
ao comando Docker:
docker build --platform linux/amd64 -t nome_da_imagem .
Utilizando a Ferramenta buildx
O Docker oferece uma ferramenta chamada buildx
que facilita a criação de imagens multiplataforma. Siga os passos abaixo para utilizá-la:
- Instale o buildx:
docker buildx install
- Configure o buildx:
docker buildx create --use
- Build a imagem para a plataforma específica:
docker buildx build --platform linux/amd64 -t nome_da_imagem .
Esta abordagem garante que a imagem seja construída de forma compatível com a arquitetura amd64
, mesmo em um host arm64
.
Exemplos Práticos
Buildando uma Imagem Laravel
Vamos supor que você tenha um Dockerfile para uma aplicação Laravel. Veja como você pode ajustá-lo para especificar a plataforma:
# Use a imagem base do PHP
FROM --platform=linux/amd64 php:7.4-fpm
# Set up o ambiente Laravel
WORKDIR /var/www
# Copie os arquivos do Laravel
COPY . .
# Instale as dependências do Composer
RUN composer install
# Expõe a porta da aplicação
EXPOSE 9000
# Comando para iniciar o PHP-FPM
CMD ["php-fpm"]
E então, execute o comando build:
docker buildx build --platform linux/amd64 -t laravel_app .
Alternativa: Usando Imagens Multiplataforma
Algumas imagens Docker já são disponibilizadas em multiplataforma. Você pode verificar se uma imagem suporta multiplataformas usando o comando:
docker manifest inspect nome_da_imagem
Se a imagem suportar arm64
e amd64
, o Docker gerenciará automaticamente a plataforma correta para o seu host.
Considerações Finais
Benefícios de Usar Build Multiplataforma
- Compatibilidade: Garantir que sua aplicação rodará em diferentes arquiteturas.
- Flexibilidade: Facilitar o desenvolvimento em ambientes diversos sem alterações significativas no código.
- Desempenho: Otimizar a performance ao utilizar a arquitetura nativa do sistema.
Dicas Adicionais
- Mantenha seu Docker atualizado para ter acesso às últimas funcionalidades e correções.
- Considere o uso de ferramentas de CI/CD que suportam build multiplataforma, como GitHub Actions ou GitLab CI.
Conclusão
Enfrentar o erro “The requested image’s platform (linux/arm64) does not match the detected host platform (linux/amd64)” pode ser desafiador, mas com as técnicas e ferramentas corretas, você pode resolvê-lo de maneira eficiente. Adotar práticas de build multiplataforma não só resolve esse problema, mas também prepara seu ambiente de desenvolvimento para ser mais robusto e flexível. Continue explorando e ajustando seu setup para tirar o máximo proveito do Docker em qualquer plataforma.
Quer aprender mais?
Não deixe de se inscrever na nossa newsletter para receber as últimas novidades e dicas sobre DevOps/SRE diretamente no seu e-mail:
Além disso, leia nossos outros posts sobre Linux e Docker, para aprender cada vez mais e continuar aprimorando suas habilidades em DevOps.