当我搬到新的 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 . .
我只需添加
as build
就可以了。
所以第一行看起来像
FROM --platform=linux/amd64 python:3.8-slim-buster as build
我不太确定上面的行和我之前使用的行有什么区别,但是
docker 文档中提到了一些
as build
。现在可以正常使用了
我在使用 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 的开头。
我遇到了与@Rasmus Haapaniemi 相同的问题,但我使用
LocalModel.build_cpr_model
创建一个预测容器。
令人惊讶的是,我能够将上面的整个文本(在我的例子中
"--platform=linux/amd64 python:3.11 AS build"
)传递给base_image
的build_cpr_model
参数,并且它直接传递到底层Dockerfile的FROM
语句,并且解决了问题。
当为错误的架构构建映像时,可能会发生这种情况。
在 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
您可以在文档中找到更多信息:多平台图像