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

添加Nginx后Docker Compose部署Django提示找不到Django模块

Docker Compose添加Nginx后Django模块找不到问题排查与解决

可能的触发原因

  • Python环境路径不匹配:Dockerfile里装的Django在某个Python环境,entrypoint.sh执行时调用了另一个版本的Python解释器
  • 工作目录配置错误:entrypoint.sh运行时不在项目根目录,导致Python找不到已安装的包或项目模块
  • 依赖安装未生效:pip install命令因网络、缓存或参数错误没真正装Django;或者用了--user参数,包只在当前用户目录,容器运行时切换了用户导致无法访问
  • Compose卷挂载覆盖:挂载本地目录到容器的/app或Python包目录,把容器内已安装的依赖覆盖了
  • entrypoint脚本问题:脚本没加执行权限,或者里面的python/pip命令指向错误环境

分步排查与修复

1. 验证Python环境与依赖状态

在Dockerfile末尾加临时验证命令,构建后进入容器检查:

# 追加到Dockerfile末尾
RUN python --version && pip list && which python

构建镜像并运行临时容器:

docker build -t django-app .
docker run --rm -it django-app /bin/bash

检查输出:确认Django在pip list结果里,Python版本和which python的路径,要和entrypoint脚本里用的一致。

2. 修正工作目录与entrypoint脚本

Dockerfile里要明确设置工作目录,确保脚本和项目文件都在正确路径:

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]

entrypoint.sh里用绝对路径调用Python(用上面which python得到的路径):

#!/bin/sh
/usr/local/bin/python manage.py migrate
/usr/local/bin/python manage.py runserver 0.0.0.0:8000

3. 调整Compose卷挂载配置

避免挂载整个/app目录(会覆盖容器内已安装的依赖),只挂载项目源码和静态文件:

version: '3.8'
services:
  app:
    build: .
    volumes:
      # 只挂载项目源码目录,不要覆盖整个/app
      - ./your-project-folder:/app/your-project-folder
      - ./static:/app/static
    ports:
      - "8000:8000"
  nginx:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./static:/usr/share/nginx/html/static
    ports:
      - "80:80"
    depends_on:
      - app

4. 确保依赖安装命令正确

用requirements.txt管理依赖的话,文件里必须明确包含Django:

# requirements.txt
Django>=4.2,<5.0
# 其他项目依赖...

Dockerfile里用pip install -r requirements.txt安装,不要单独装避免遗漏;不用requirements.txt的话,确保pip install django没有拼写错误,且不要加--user参数:

RUN pip install django==4.2.5

5. 处理容器运行用户问题

如果Dockerfile里用USER切换了用户,要么不要用--user装依赖,要么给用户加访问权限:

RUN pip install --no-cache-dir django
# 提前创建用户并设置权限
RUN useradd -m appuser
USER appuser

如果之前用了--user安装,在entrypoint.sh里把用户的Python包路径加入环境变量:

#!/bin/sh
export PYTHONPATH=$HOME/.local/lib/python3.11/site-packages:$PYTHONPATH
python manage.py migrate

针对ImportError的额外处理

如果错误是找不到项目自己的模块,在entrypoint.sh里把项目根目录加入Python路径:

export PYTHONPATH=/app:$PYTHONPATH

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:01:29