docker AWS Batch run ECR repository error:exec /usr/local/bin/python3:exec format error

t9aqgxwy  于 2024-01-06  发布在  Docker
关注(0)|答案(2)|浏览(98)

我有一个AWS批处理作业,当它试图在ECR中运行Docker镜像时返回以下错误:

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

字符串
我在macOS上使用M1芯片构建了镜像。因此,我使用以下命令使用--platform linux/amd64参数构建了镜像。我还尝试了--platform linux/x86_64

docker buildx build --no-cache --platform linux/amd64 -t repository-name:latest .


然后我运行docker inspect --format='{{.Architecture}}' repository-name:latest,它返回arm64。容器的CPU架构是X86_64。这是我的问题所在吗?如果是,我的构建步骤有什么不正确?
这是我的Docker文件:

FROM python:3.9

WORKDIR /usr/src/app/

COPY . /usr/src/app/

RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 80

ENV NAME World

CMD ["python3", "/usr/src/app/hello_world.py"]


这是我的hello_world.py脚本:

import pandas as pd

print('hello world!')


其他故障排除:
1.运行docker run -it <image> bash以验证/usr/src/app路径是否正确。
1.已验证Docker中Python 3二进制文件的路径,which python3
1.运行图像python3 /usr/src/app/hello_world.py,输出正确。
1.重新编译和重新创建作业、作业定义和存储库。
我希望这些细节足以帮助我解决问题。
谢谢你的阅读。

wi3ka0sx

wi3ka0sx1#

执行格式错误
这个错误是典型的不匹配的CPU架构,所以是的,你的假设是正确的。
您为Intel/AMD 64位构建容器映像的命令是正确的。我怀疑您在尝试将容器部署到AWS Batch服务时使用了不匹配的容器映像标记。请确保在运行inspect命令时引用的标记与build命令相同,而不是每次都使用latest标记。这可能就是为什么你会看到不一致的结果。

zbdgwd5y

zbdgwd5y2#

我找到了一个解决方案。尽管在build命令中使用了--no-cache,但本地层显然被缓存了,在我运行docker system prune -a后,再次构建并检查了构建,它处于正确的架构amd64中。我推到存储库,它正确运行。缓存统治着我周围的一切。

相关问题