'how to run amd64 docker images on arm64 host platform

I have an m1 mac and I am trying to run a amd64 based docker image on my arm64 based host platform. However, when I try to do so (with docker run) I get the following error:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested. 

When I try adding the tag --platform linux/amd64 the error message doesn't appear, but I can't seem to go into the relevant shell and docker ps -a shows that the container is immediately exited upon starting. Would anyone know how I can run this exact image on my machine given the circumstances/how to make the --platform tag work?



Solution 1:[1]

Using --platform is correct. On my M1 Mac I'm able to run both arm64 and amd64 versions of the Ubuntu image from Docker Hub. The machine hardware name provided by uname proves it.

# docker run --rm -ti --platform linux/arm/v7 ubuntu:latest uname -m
armv7l

# docker run --rm -ti --platform linux/amd64 ubuntu:latest uname -m
x86_64

Running amd64 images is enabled by Rosetta2 emulation, as indicated here.

Not all images are available for ARM64 architecture. You can add --platform linux/amd64 to run an Intel image under emulation.

If the container is exiting immediately, that's a problem with the specific container you're using.

Solution 2:[2]

To address the problem of your container immediately exiting after starting, try using the entrypoint flag to overwrite the container's entry point. It would look something like this:

docker run -it --entrypoint=/bin/bash image_name

Credit goes to this other SO answer that helped me solve a similar issue on my own container.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nic
Solution 2 Josh Correia