使用 Apple M1 Max 时 Docker 上的 Python“exec /usr/local/bin/python3: exec format error”

问题描述 投票:0回答:4

当我搬到新的 Mac M1 Max 时,我的 docker 镜像就工作正常了。即使使用我的 M1 Max,我也已经安装了 docker 并成功创建了映像,并将其推送到 AWS ECR。现在,当我运行该图像时,它不会运行,但会抛出错误

exec /usr/local/bin/python3: exec format error

我的 Dockerfile 如下所示,但还没有运气。每次都是同样的错误。我知道在 Mac M1 Max 上构建 docker 镜像并运行它们并不简单,但在许多 StackOverflow 答案中我发现下面的添加

--platform=linux/arm64
有帮助,但对我来说还没有帮助。

FROM --platform=linux/amd64 python:3.8-slim-buster
# FROM --platform=linux/arm64 python:3.8-slim-buster (tried this one as well)
# FROM --platform=linux/arm64/v8 python:3.8-slim-buster (tried this one as well)


WORKDIR /project
COPY ./requirements.txt .

RUN apt-get -qq update 
RUN pip3 --quiet install --requirement requirements.txt \
         --force-reinstall --upgrade

COPY . .

linux docker apple-m1 python-3.8
4个回答
16
投票

我只需添加

as build
就可以了。 所以第一行看起来像

FROM --platform=linux/amd64 python:3.8-slim-buster as build

我不太确定上面的行和我之前使用的行有什么区别,但是

docker 文档
中提到了一些 as build。现在可以正常使用了


3
投票

我在使用 Google Vertex AI 和 ARM-Macbook 时也遇到了同样的问题。

我使用

docker build
在本地构建了一个 ML 训练容器,该容器运行了模拟测试,没有任何错误,并且从终端执行时,实际的 Python 代码也运行良好。

但是,容器在 Vertex AI 训练作业中使用时无法工作,并导致两个模糊的错误代码:

exec /usr/local/bin/python: exec format error
The replica workerpool0-0 exited with a non-zero status of 1

使用提供的解决方案解决了问题, 通过添加

FROM --platform=linux/amd64 python:3.10 AS build
在 Dockerfile 的开头。


1
投票

我遇到了与@Rasmus Haapaniemi 相同的问题,但我使用

LocalModel.build_cpr_model
创建一个预测容器。

令人惊讶的是,我能够将上面的整个文本(在我的例子中

"--platform=linux/amd64 python:3.11 AS build"
)传递给
base_image
build_cpr_model
参数,并且它直接传递到底层Dockerfile的
FROM
语句,并且解决了问题。


0
投票

当为错误的架构构建映像时,可能会发生这种情况。

在 ARM 处理器上使用:

FROM --platform=linux/arm64 python:3.8-slim-buster as build

在 AMD/Intel 处理器上使用:

FROM --platform=linux/amd64 python:3.8-slim-buster as build

您可以在文档中找到更多信息:多平台图像

© www.soinside.com 2019 - 2024. All rights reserved.