You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Docker镜像至Heroku时遭遇“Python3 not found”错误求助

解决Heroku部署Docker化Django应用时的"Python3 not found"错误

你的问题主要出在Dockerfile的CMD命令语法错误以及环境变量解析的问题上,咱们一步步来解决:

问题根源分析

  1. CMD数组语法错误:你原来的CMD写法是把整个命令作为单个字符串元素,Docker会尝试去找名为python3 manage.py runserver 0.0.0.0:$PORT的可执行文件——这显然不存在,哪怕你用了Python3的完整路径也没用,因为整个字符串被当成了命令名,而不是python3加参数。
  2. 环境变量无法解析:用数组形式的CMD时,Docker不会通过shell解析环境变量$PORT,它会被当作字面量传递,这不符合Heroku动态分配端口的要求。

修正后的Dockerfile

FROM mhart/alpine-node
RUN echo "ipv6" >> /etc/modules
RUN echo "http://nl.alpinelinux.org/alpine/v3.7/community" >> /etc/apk/repositories
RUN apk add --no-cache python3 yarn && python3 -m ensurepip
# 可选:添加这行确认Python3的实际路径,方便调试
RUN which python3
RUN mkdir /code
WORKDIR /code
COPY . /code
RUN pip3 install -r requirements.txt
RUN yarn
RUN yarn build:dev
EXPOSE $PORT
# 用shell形式执行,既正确传递参数,又能解析环境变量$PORT
CMD python3 manage.py runserver 0.0.0.0:$PORT

如果一定要用数组形式(比如需要避免shell干扰),可以改成用sh -c包裹命令,让shell帮忙解析变量:

CMD ["sh", "-c", "python3 manage.py runserver 0.0.0.0:$PORT"]

额外建议

  • 虽然runserver能临时运行,但Django的开发服务器不适合生产环境,建议后续换成gunicorn这类生产级WSGI服务器;
  • 如果你不需要node环境的部分功能,也可以考虑用Python官方的Alpine镜像作为基础,再安装node,这样镜像会更贴合Python应用的需求。

内容的提问来源于stack exchange,提问作者HackAfro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:20