Reputation: 1153
I want to run a docker container for Ganache
on my MacBook M1, but get the following error:
The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
After this line nothing else will happen anymore and the whole process is stuck, although the qemu-system-aarch64 is running on 100% CPU according to Activity Monitor until I press CTRL+C.
My docker-files come from this repository. After running into the same issues there I tried to isolate the root cause and came up with the smallest setup that will run into the same error.
This is the output of docker-compose up --build
:
Building ganache
Sending build context to Docker daemon 196.6kB
Step 1/17 : FROM trufflesuite/ganache-cli:v6.9.1
---> 40b011a5f8e5
Step 2/17 : LABEL Unlock <[email protected]>
---> Using cache
---> aad8a72dac4e
Step 3/17 : RUN apk add --no-cache git openssh bash
---> Using cache
---> 4ca6312438bd
Step 4/17 : RUN apk add --no-cache python python-dev py-pip build-base && pip install virtualenv
---> Using cache
---> 0be290f541ed
Step 5/17 : RUN npm install -g [email protected]
---> Using cache
---> d906d229a768
Step 6/17 : RUN npm install -g yarn
---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
---> Running in 991c1d804fdf
docker-compose.yml:
version: '3.2'
services:
ganache:
restart: always
build:
context: ./development
dockerfile: ganache.dockerfile
env_file: ../.env.dev.local
ports:
- 8545:8545
ganache-standup:
image: ganache-standup
build:
context: ./development
dockerfile: ganache.dockerfile
env_file: ../.env.dev.local
entrypoint: ['node', '/standup/prepare-ganache-for-unlock.js']
depends_on:
- ganache
ganache.dockerfile:
The ganache.dockerfile can be found here.
Running the whole project on an older iMac with Intel-processor works fine.
Upvotes: 108
Views: 176530
Reputation: 5599
If you're planning to run the image in your laptop, you need to build it for the cpu architecture of that particular machine. You can provide the --platform
option to docker build (or even to docker-compose
) to define the target platform you want to build the image for.
For example:
docker build --platform linux/arm64 .
Upvotes: 67
Reputation: 141
Use colima. then you'll be able to run x86/64 only images on your M1/M2 Mac as well
brew install colima
colima start --memory 4 --arch x86_64
docker run [image name you want to run]
That's it. it's quite simple. https://github.com/abiosoft/colima
Upvotes: 1
Reputation: 4809
We were facing this issue with the localstack image.
Below is the snippet from the docker-compose.yml
localstack:
container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
image: localstack/localstack:1.2.0
ports:
- "4566:4566"
environment:
- DOCKER_HOST=unix:///var/run/docker.sock
One of the developers working with M1 chipset on Mac was getting this issue.
So there are few approaches
platform: linux/amd64
in the image declaration in docker-compose.ymlexport DOCKER_DEFAULT_PLATFORM=linux/amd64
before running the docker-compose.ymlimage: localstack/localstack:1.2.0-amd64
Upvotes: 9
Reputation: 49
You should have the docker buildx installed. If you don't have the docker-desktop you can download the binary buildx from github: https://github.com/docker/buildx/
After installation you can build your image like Theofilos Papapanagiotou said
<downloaded_path>/buildx --platform linux/amd64 ...
Upvotes: 2
Reputation: 91
Build the image by passing the list of architecture
Try this:
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t username/demo:latest --push .
Note: ensure to place "." at the end
Upvotes: 6
Reputation: 5056
With docker-compose you also have the platform
option.
version: "2.4"
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.1.1
hostname: zookeeper
container_name: zookeeper
platform: linux/amd64
ports:
- "2181:2181"
Upvotes: 33
Reputation: 74
You might need to run
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
in order to register foreign file formats with the kernel.
Upvotes: -1
Reputation: 5056
On M1 MacBook Pro, I've had success using docker run --platform linux/amd64
Example
docker run --platform linux/amd64 node
Upvotes: 55