免责声明:我对Docker不熟悉,并且意识到自己的无知。
我试图在M1 Pro电脑上构建一个amd64架构的Docker容器。我在docker-compose.yml中指定了 platform: linux/amd64,同时在Dockerfile中使用了 FROM --platform=linux/amd64(同时或单独地)。
如果我将其包含在该容器的Dockerfile中,它可以正常构建,但是shell中的uname -a命令显示的是aarch64架构(而不是x86_64)。
如果我将它包含在docker-compose.yml中,我会得到以下错误:
我试图在M1 Pro电脑上构建一个amd64架构的Docker容器。我在docker-compose.yml中指定了 platform: linux/amd64,同时在Dockerfile中使用了 FROM --platform=linux/amd64(同时或单独地)。
如果我将其包含在该容器的Dockerfile中,它可以正常构建,但是shell中的uname -a命令显示的是aarch64架构(而不是x86_64)。
如果我将它包含在docker-compose.yml中,我会得到以下错误:
Error response from daemon: image with reference api:latest was found but does not match the specified platform: wanted linux/amd64, actual: linux/arm64/v8
这里的api
是我试图使用docker-compose
来构建的容器之一。
文件结构:
.
├── api
│ ├── Dockerfile-API
│ ├── entrypoint.sh
│ └── ...
├── db
│ └── ...
├── docker-compose.yml
└── nginx
└── ...
./docker-compose.yml
:
version: '3.0'
services:
db:
...
api:
platform: linux/amd64 # line in question
build:
context: ./api
dockerfile: Dockerfile-API
command: ./run.sh
depends_on:
- db
env_file: local.env
networks:
- nginx_network
expose:
- "8000"
ports:
- "3000:3000"
image: api:latest
...
nginx:
...
networks:
nginx_network:
external: true
volumes:
...
./api/Dockerfile-API
FROM --platform=linux/amd64 python3.6 # line in question
...
从目录 .
中,使用在 docker-compose.yml
中设置的平台:
$ docker-compose down
$ docker-compose up
Error response from daemon: image with reference api:latest was found but does not match the specified platform: wanted linux/amd64, actual: linux/arm64/v8
从目录 .
开始,在 ./api/Dockerfile-API
中设置平台:
$ docker-compose down
$ docker-compose up -d
$ docker-compose exec api bash
> uname -a
Linux bc17e565c265 5.10.104-linuxkit #1 SMP PREEMPT Thu Mar 17 17:05:54 UTC 2022 aarch64 GNU/Linux
我非常感激任何有关为什么会发生这种情况以及如何解决它的想法/建议。我的计算机安装了Rosetta 2,并且Docker已经更新到最新版本。谢谢!