Las imágenes Docker creadas en un MacBook M1 tienen la arquitectura
linux/arm64
y no funcionan en ordenadores con el procesador Intel, que
necesitan la arquitectura linux/amd64
.
Para solucionar este problema podemos crear y subir a Docker Hub una imagen multiplataforma. Así tendremos una imagen que funciona bien para ordenadores Intel y para ordenadores con arquitectura ARM como el MacBook M1.
Probado con la versión 3.5.2 de Docker Desktop y la versión 20.10.7 de Docker Engine.
Para configurar buildx
:
$ docker buildx create --name mbuilder
$ docker buildx use mbuilder
% docker buildx inspect --bootstrap
Name: mbuilder
Driver: docker-container
Nodes:
Name: mbuilder0
Endpoint: unix:///var/run/docker.sock
Status: running
Platforms: linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le,
linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7,
linux/arm/v6
Antes de construir la imagen debemos logearnos en Docker Hub, porque la imagen multiplataforma no se almacena en local, sino que hay que subirla al repositorio.
$ docker login -u domingogallardo
Y ahora ya podemos crear una imagen capaz de ejecutarse en la
arquitectura linux/amd64
y linux/arm64
:
$ docker buildx build --platform linux/amd64,linux/arm64 -t domingogallardo/getting-started:latest --push .
Con este comando se construye la imagen multiplataforma y se sube a Docker Hub.
Como siempre, para ejecutar la imagen, haremos docker run
.
Docker examinará la arquitectura del ordenador y se descargará la imagen apropiada.
$ docker run -dp 3000:3000 domingogallardo/getting-started
Si estamos en una máquina Intel se bajará la imagen linux/amd64
y si
estamos en un MacBook M1 se bajará la imagen linux/arm64
.