Mac M1 上的 Docker 给出:“请求的映像的平台 (linux/amd64) 与检测到的主机平台不匹配”

Mrs*_*kik 94 arm docker docker-compose apple-m1

我想在 MacBook M1 上运行 docker 容器Ganache,但出现以下错误:

The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
Run Code Online (Sandbox Code Playgroud)

在此行之后,不会再发生任何其他事情,并且整个过程被卡住,尽管根据活动监视器,qemu-system-aarch64 正在 100% CPU 上运行,直到我按CTRL+ C

我的 docker 文件来自此存储库。遇到相同的问题后,我尝试找出根本原因,并提出了会遇到相同错误的最小设置。

这是以下的输出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 <ops@unlock-protocol.com>
 ---> 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 npm@6.4.1
 ---> 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

ganache.docker文件:

ganache.docker 文件可以在这里找到。

在配备 Intel 处理器的旧 iMac 上运行整个项目效果很好。

The*_*tou 58

如果您计划在笔记本电脑中运行该映像,则需要针对该特定机器的 CPU 架构构建它。您可以--platform向 docker build (甚至是docker-compose)提供选项来定义要为其构建映像的目标平台。

例如:

docker build --platform linux/arm64  .
Run Code Online (Sandbox Code Playgroud)

  • 对于使用 docker compose 的用户,请将“platform: linux/amd64”选项添加到“docker-compose.yml”中受影响的映像中 (11认同)
  • 添加“buildx”并运行: $ docker buildx build --platform linux/amd64 。 (2认同)

Rya*_*yan 47

在 M1 MacBook Pro 上,我已成功使用docker run --platform linux/amd64

例子

docker run --platform linux/amd64 node
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用。也许您的意思是“arm64”或此解决方案仅适用于特定图像。 (7认同)
  • 请注意,“node”应替换为适当的图像名称。否则它将拉取并运行“node”而不是所需的图像。 (4认同)
  • 此示例仅适用于节点映像,并运行到“arm64”硬件上的“amd64”映像。并非所有图像似乎都支持这一点。 (2认同)

Rya*_*yan 30

使用 docker-compose 您还可以选择platform

version: "2.4"
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.1.1
    hostname: zookeeper
    container_name: zookeeper
    platform: linux/amd64
    ports:
      - "2181:2181"
Run Code Online (Sandbox Code Playgroud)


San*_*ani 8

我们在使用 localstack 映像时遇到了这个问题。

下面是 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
Run Code Online (Sandbox Code Playgroud)

一位在 Mac 上使用 M1 芯片组的开发人员遇到了这个问题。

所以方法很少

  1. 在 docker-compose.yml 中添加platform: linux/amd64镜像声明
  2. export DOCKER_DEFAULT_PLATFORM=linux/amd64在运行 docker-compose.yml 之前运行此命令
  3. 最好是参考架构特定的图像。例如在我们的例子中,我们使用image: localstack/localstack:1.2.0-amd64

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