You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker部署Django+Daphne应用时出现ModuleNotFoundError: No module named 'project'错误

Docker部署Django+Daphne应用时出现ModuleNotFoundError: No module named 'project'错误

看起来你在Docker环境下部署Django+Daphne应用时遇到了模块找不到的问题,我仔细看了你的配置和目录结构,大概率是路径配置不匹配导致的,下面一步步帮你排查和解决:

核心问题分析

从你的目录结构来看,本地项目的层级是:drf-vue3-gym-managament/backend/project/,其中backend/project下有manage.py,里面还有一个子目录project(包含asgi.pysettings.py)。结合Docker配置和错误日志,主要存在两个关键问题:

  1. Docker构建上下文与目录结构不匹配,导致容器内的文件路径混乱;
  2. PYTHONPATH设置依赖当前工作目录,没有明确指向能找到Django模块的路径。

具体修复方案

1. 修正Docker Compose的构建上下文

如果你的docker-compose.yml放在项目根目录drf-vue3-gym-managament下,而Dockerfilebackend目录里,当前的build.context: .会把整个根目录(包括backendfrontend)复制到容器的/backend/目录下,导致容器内的路径变成/backend/backend/project/...,完全偏离预期。

修改docker-compose.yml中的web服务构建配置:

services:
  web:
    build:
      context: ./backend  # 改为指向backend目录
      dockerfile: Dockerfile  # 注意文件名大小写,和本地文件保持一致

这样构建时会以backend目录为上下文,COPY . /backend/会把本地backend下的所有内容复制到容器的/backend/,容器内的路径就会和你预期的一致:/backend/project/manage.py

2. 明确设置PYTHONPATH

原来的PYTHONPATH="."依赖当前工作目录,容易出问题。直接在Dockerfile中固定PYTHONPATH为manage.py所在的目录:

# 替换原来的ENV PYTHONPATH="."
ENV PYTHONPATH="/backend/project"

这样Python会直接在/backend/project目录下查找project模块(也就是里面的子目录project,包含asgi.py),确保能正确导入。

3. 验证容器内路径(可选)

如果修改后还是有问题,可以进入容器检查路径是否正确:

docker exec -it c_django ls /backend

正常情况下应该能看到project目录,进入该目录后能看到manage.py和子目录project

4. 确认Daphne命令和环境变量

保持DJANGO_SETTINGS_MODULE=project.settings的设置(因为容器内/backend/project/project/settings.py是正确的路径),Daphne的命令不需要修改,只要路径正确就能找到project.asgi:application

总结

先调整Docker Compose的构建上下文,确保容器内的文件路径和本地一致,再固定PYTHONPATH,这两个步骤应该能解决模块找不到的问题。如果还有疑问,可以临时把Daphne命令换成python manage.py runserver测试,看是否能正常启动,排查是不是Daphne的特殊问题。

备注:内容来源于stack exchange,提问作者whisber

火山引擎 最新活动