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

Docker部署Django应用运行Gunicorn出现ModuleNotFoundError错误

问题排查与解决方案

1. Gunicorn 找不到project_name模块问题

根因分析

  • 实际Django项目内层配置模块名和启动参数不匹配:你的wsgi.py文件明确标注项目名为creativ_ceutical,配置加载路径为creativ_ceutical.settings,但启动Gunicorn时用的是教程模板的占位名project_name.wsgi,属于模板字段未替换完全。
  • 路径检索配置缺失:你cd到/opt/app/project_name(manage.py所在目录)启动服务时,未显式将当前目录加入Python模块检索路径,也可能导致模块识别失败。

修复步骤

  • 先确认/opt/app/project_name/下和app_name同级的内层配置目录的实际名称,如果名称为creativ_ceutical,将start-server.sh中的Gunicorn启动命令修改为:
(cd project_name; gunicorn creativ_ceutical.wsgi  --user www-data --bind 0.0.0.0:8010 --workers 3 --pythonpath .) &

其中--pythonpath .作用是显式将当前目录加入Python检索路径,规避路径识别异常。

  • 同步检查manage.py中的配置,确保os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxx.settings')中的xxx和内层配置目录名、wsgi文件里的配置完全对齐。

2. Nginx 绑定80端口失败问题

根因分析

  • 你的nginx.default默认配置监听的是80端口,要么是容器内80端口已被占用,要么是Dockerfile中声明暴露的端口是8020,和Nginx监听端口不匹配,端口映射也没有对应配置。

修复步骤

  • 修改nginx.default配置,将监听端口改为8020,同时配置反向代理转发到Gunicorn的8010端口,参考配置片段:
server {
    listen 8020;
    server_name _;
    location / {
        proxy_pass http://127.0.0.1:8010;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    # 静态资源路由可自行补充,路径指向/opt/app/project_name/static即可
}
  • 启动容器时对应配置端口映射,示例命令:docker run -p 8020:8020 你的镜像名称,将宿主机8020端口和容器8020端口绑定。

验证排查技巧

可以先进入容器手动执行命令定位问题:

# 启动临时容器并进入bash交互
docker run -it --rm 你的镜像名称 bash
# 切换到manage.py所在目录
cd /opt/app/project_name
# 先验证Django本身可正常启动
python manage.py runserver 0.0.0.0:8010
# 确认无问题后再验证Gunicorn启动逻辑
gunicorn 你的内层配置目录名.wsgi --bind 0.0.0.0:8010 --workers 1

上述命令都能正常执行的情况下,再校验启动脚本、Nginx配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:18:02