La versión beta actual de docker requiere que especifique --platform=linux/amd64 cada vez que necesite build o run una imagen/contenedor amd64.
La documentación menciona
Al ejecutar una imagen compatible con varias arquitecturas, Docker seleccionará automáticamente una variante de imagen que coincida con su sistema operativo y arquitectura.
La documentación no especifica una forma de alterar este comportamiento automático usando variables env. Parece ignorar tanto BUILDPLATFORM como TARGETPLATFORM.
¿Hay alguna otra forma de obligar a la docker a ejecutar todos los comandos de build y run con una plataforma linux/amd64 en lugar de linux/arm64/v8 de forma predeterminada en macOS que se ejecuta en apple-silicon?
Puede usar buildx (mobi) que admite cli para la plataforma.
docker buildx build --platform linux/amd64 .
Las imágenes de Docker creadas con Apple Silicon (u otra arquitectura basada en ARM64) pueden generar problemas al implementar las imágenes en un entorno AMD64 basado en Linux o Windows (p. ej., AWS EC2, ECS, etc.). Por ejemplo, puede intentar cargar su imagen de Docker creada en el chip M1 a un repositorio de AWS ECR y no se ejecuta. Por lo tanto, necesita una forma de compilar imágenes basadas en AMD64 en la arquitectura ARM64, ya sea usando Docker build (para imágenes individuales) o docker-compose build (por ejemplo, para aplicaciones de varias imágenes que se ejecutan en una red docker compose).
Para crear imágenes de una sola ventana acoplable: configure su variable de entorno usando la línea de comando o modificando su archivo .bashrc o .zshenv como se sugiere en la respuesta aceptada.
export DOCKER_DEFAULT_PLATFORM=linux/amd64 Alternativamente, en el Dockerfile, incluya el siguiente indicador en el comando FROM (para una compilación de Dockerfile de varias etapas, el indicador solo es necesario para la primera etapa):
FROM --platform=linux/amd64 python:3.7-alpine Para crear imágenes como parte de una compilación docker-compose , incluya la platform: linux/amd64 para cada servicio. Por ejemplo:
services: frontend: platform: linux/amd64 build: frontend ports: - 80:80 depends_on: - backend backend: platform: linux/amd64 build: backendNo necesita exportar la variable env como se menciona en una de las respuestas, puede ejecutarla como parte del comando una sola vez haciendo:
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose buildTenga en cuenta que si ya descargó la imagen para una plataforma diferente, Docker seguirá usando esa imagen sin importar qué plataforma especifique como predeterminada.
Puede configurar la variable de entorno DOCKER_DEFAULT_PLATFORM
export DOCKER_DEFAULT_PLATFORM=linux/amd64