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

Docker化Django项目部署Heroku出现Application错误如何解决

问题原因

  1. heroku.yml的启动命令配置完全错误:你当前配置的run.web是Ruby项目的Puma服务启动命令,和你的Python Django项目完全不匹配,是触发解析报错的核心原因。
  2. Dockerfile存在多处错误:
    • 缺失基础镜像声明,镜像构建无法正常启动
    • 依赖文件名拼写错误,把requirements.txt写为requiremenrs.txt,会导致依赖安装失败
    • 构建阶段执行migrate操作:镜像构建时没有数据库访问权限,迁移操作应该放在服务启动阶段执行
    • 硬编码监听端口为8000:Heroku会动态分配端口,要求Web服务必须监听平台提供的$PORT环境变量,硬编码会导致服务无法被外部访问
  3. docker-compose.yml是本地开发用的配置,和Heroku部署无关,不需要改动。

解决方案

1. 修正Dockerfile

# 声明Python基础镜像,可根据你的项目需求更换版本
FROM python:3.10-slim
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN python -m pip install --upgrade pip
# 修正依赖文件拼写错误
RUN pip3 install -r requirements.txt
# 启动命令集成迁移操作,使用Heroku分配的PORT变量
CMD sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:$PORT"

2. 修正heroku.yml

直接删除错误的run配置即可,Dockerfile中已经声明了正确的启动命令,修正后的内容如下:

build:
  docker:
    web: Dockerfile

如果要把启动命令统一放在heroku.yml中管理,也可以写成如下形式:

build:
  docker:
    web: Dockerfile
run:
  web: sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:$PORT"

3. 重新执行部署命令

heroku container:login
heroku container:push web
heroku container:release web

生产环境优化建议

Django自带的runserver仅适用于开发调试,生产环境建议替换为gunicorn:

  • 在requirements.txt中添加gunicorn依赖
  • 将启动命令替换为:gunicorn 你的项目名.wsgi --bind 0.0.0.0:$PORT
  • 提前配置好Heroku环境变量中的SECRET_KEY、数据库连接等必要配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:01