Docker构建Python/Flask镜像时RUN pip命令执行失败求助
解决Docker构建时
exec /bin/sh: exec format error问题 核心原因
这个错误绝大多数是CPU架构不兼容导致的:比如你用ARM架构机器(如苹果M1/M2芯片),但拉取了默认的AMD64架构Python镜像,容器内二进制文件和宿主机架构不匹配,执行命令时就会触发格式错误。之前构建成功可能是Docker自动适配了架构,后续缓存残留不兼容镜像层导致失败。
解决方案
1. 明确指定镜像架构
在Dockerfile的FROM行添加平台参数,匹配你的宿主机架构:
- ARM64架构(苹果M系列、部分国产芯片):
FROM --platform=linux/arm64 python:3.9 - AMD64架构(普通x86_64电脑):
FROM --platform=linux/amd64 python:3.9
2. 清理缓存后重新构建
之前的缓存可能残留不兼容镜像层,执行以下命令彻底清理后重新构建:
# 清理所有未使用的镜像、容器、缓存(谨慎操作,会删除未用到的资源) docker system prune -a # 不带缓存构建,同时指定对应平台 docker build --no-cache --platform=linux/arm64 -t flask-finding-driver .
(将--platform值替换为你的实际架构)
3. 统一使用python3命令
部分镜像中python指向Python2,改为python3避免版本混淆:
修改Dockerfile中的RUN命令:
RUN python3 -m pip install --upgrade pip RUN pip3 install -r requirements.txt
修正后的完整Dockerfile示例(ARM64版本)
FROM --platform=linux/arm64 python:3.9 WORKDIR /flask-finding-driver COPY finding_driver.py requirements.txt /flask-finding-driver/ RUN python3 -m pip install --upgrade pip RUN pip3 install -r requirements.txt EXPOSE 5000 ENV FLASK_APP=finding_driver.py CMD ["flask", "run", "--host=0.0.0.0"]
内容的提问来源于stack exchange,提问作者Rivaldo
相关产品推荐
相关产品推荐

