Docker部署Django必须用Gunicorn替代runserver,采用多阶段构建:第一阶段安装依赖并collectstatic,第二阶段仅复制site-packages和代码,CMD设为gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application,确保项目结构正确、路径匹配、静态文件由Nginx服务。

在 Docker 中部署 Django 应用,核心是**不用 runserver,改用 Gunicorn 作为生产 WSGI 服务器**,并确保镜像精简、路径正确、端口可访问。
写一个最小但可用的 Dockerfile
必须用多阶段构建,避免把开发依赖和源码编译过程留在生产镜像里:
- 第一阶段:基于
python:3.11-slim安装requirements.txt(含django和gunicorn),运行collectstatic --noinput - 第二阶段:再起一个干净的
python:3.11-slim镜像,只复制第一阶段的site-packages和项目代码 -
CMD必须是gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application,不能写127.0.0.1:8000(否则外部连不上) - 加上
ENV PYTHONUNBUFFERED=1,让日志实时输出到docker logs
确保 Gunicorn 能找到 wsgi 模块
常见报错 ModuleNotFoundError: No module named 'myproject.wsgi' 不是缺包,而是路径或结构不对:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
-
myproject/目录下必须有空的__init__.py文件,让它成为 Python 包 -
WORKDIR /app后,/app下要直接包含myproject/和manage.py -
manage.py中的os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')必须和实际目录名一致
启动参数和并发设置要点
Gunicorn 不是配置越多越好,关键是符合容器场景:
- 去掉
--reload:Docker 镜像内代码是只读的,这个参数只对本地开发有效 -
--workers建议设为$(nproc) * 2 + 1,单核机器就用3;别盲目设成 8 或 16 - 如果后续接 Nginx,建议加
--timeout 120 --keep-alive 5防止长连接中断
配合 Nginx 的静态文件处理
Django 本身不服务静态文件,得靠 Nginx 承担:
-
settings.py中明确设好STATIC_ROOT = BASE_DIR / 'staticfiles' - Dockerfile 第二阶段末尾执行
python manage.py collectstatic --noinput - 用
docker-compose.yml把 Django 容器的/app/staticfiles卷映射给 Nginx 容器 - Nginx 配置里用
location /static/ { alias /app/staticfiles/; },注意alias末尾斜杠和路径对应关系

















