Mac M1上的Docker提供:“请求的映像平台(linux/amd 64)与检测到的主机平台不匹配”

t1rydlwq  于 2022-12-29  发布在  Docker
关注(0)|答案(7)|浏览(2837)

我想在我的MacBook M1上运行Ganache的Docker容器,但收到以下错误:

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

在这一行之后,没有任何其他事情发生,整个过程被卡住,尽管根据活动监视器,qemu-system-aarch 64在100% CPU上运行,直到我按下CTRL+C。
我的docker-files来自this repository。在遇到同样的问题后,我试图找出根本原因,并提出了将遇到同样错误的最小设置。
这是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

停靠-编写.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

加纳什.停靠文件:

可以在here中找到ganache. docker文件。
在一台装有英特尔处理器的旧iMac上运行整个项目效果很好。

6pp0gazn

6pp0gazn1#

如果你打算在你的笔记本电脑上运行镜像,你需要为特定机器的cpu架构构建它,你可以提供--platform选项给docker build(或者甚至docker-compose)来定义你想要构建镜像的目标平台。
例如:

docker build --platform linux/amd64  .
ojsjcaue

ojsjcaue2#

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

    • 示例**
docker run --platform linux/amd64 node
7ivaypg9

7ivaypg93#

使用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"
0ve6wy6x

0ve6wy6x4#

你应该已经安装了docker buildx,如果你还没有安装docker-desktop,你可以从github下载二进制的buildx:https://github.com/docker/buildx/
安装后,你可以建立你的形象,就像TheofilosPapapanagiotou说
<downloaded_path>/buildx -平台Linux/amd 64...

3bygqnnd

3bygqnnd5#

通过传递体系结构列表构建映像
试试这个:

docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t username/demo:latest --push .

注:确保在结尾处放置"."

cs7cruho

cs7cruho6#

你可能要跑了

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

以便向内核注册外来文件格式。

dvtswwa3

dvtswwa37#

我们在本地堆栈映像中遇到了这个问题。
下面是来自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

在Mac上使用M1芯片组的开发人员之一遇到了这个问题。
所以几乎没有什么方法
1.在docker-compose.yml的图像声明中添加platform: linux/amd64
1.在运行docker-compose.yml之前运行此命令export DOCKER_DEFAULT_PLATFORM=linux/amd64
1.最好是引用特定于体系结构的映像。例如,在我们的示例中,我们使用image: localstack/localstack:1.2.0-amd64

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

相关问题