MrsBookik
MrsBookik

Reputation: 1153

Docker on Mac M1 gives: "The requested image's platform (linux/amd64) does not match the detected host platform"

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

Answers (8)

Theofilos Papapanagiotou
Theofilos Papapanagiotou

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

Shane Park
Shane Park

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

Sanjay Bharwani
Sanjay Bharwani

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

  1. Add platform: linux/amd64 in the image declaration in docker-compose.yml
  2. Run this command export DOCKER_DEFAULT_PLATFORM=linux/amd64 before running the docker-compose.yml
  3. Best is to refer the architecture specific image. For e.g. in our case, we used image: localstack/localstack:1.2.0-amd64

Reference https://hub.docker.com/layers/localstack/localstack/1.2.0-amd64/images/sha256-474600686aa98e8c79df96a9e7e5f689487c3a624ba8e464a0b6c3f45985cbcd?context=explore

Upvotes: 9

Juliano Franco
Juliano Franco

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

Ashar Siddiqui
Ashar Siddiqui

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

Ryan
Ryan

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

Thor Tomasarson
Thor Tomasarson

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

Ryan
Ryan

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

Related Questions