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

部署Monorepo中Docker化Django应用时遇ModuleNotFoundError

部署Docker化Django应用至DigitalOcean时出现ModuleNotFoundError

问题描述

尝试将Docker化的Django应用部署至DigitalOcean,构建阶段顺利完成,但部署环节报错No module named 'backend-server'。backend-server是Monorepo中存放所有后端文件的目录,推测问题出在WSGI配置,但不知从何处开始排查。

错误日志

[2022-07-30 14:35:47] [2022-07-30 14:35:47 +0000] [2] [INFO] Starting gunicorn 20.1.0
[2022-07-30 14:35:47] [2022-07-30 14:35:47 +0000] [2] [INFO] Listening at: http://127.0.0.1:8000 (2)
[2022-07-30 14:35:47] [2022-07-30 14:35:47 +0000] [2] [INFO] Using worker: sync
[2022-07-30 14:35:47] [2022-07-30 14:35:47 +0000] [4] [INFO] Booting worker with pid: 4
[2022-07-30 14:35:47] [2022-07-30 14:35:47 +0000] [4] [ERROR] Exception in worker process
[2022-07-30 14:35:47] Traceback (most recent call last):
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
[2022-07-30 14:35:47]     worker.init_process()
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
[2022-07-30 14:35:47]     self.load_wsgi()
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
[2022-07-30 14:35:47]     self.wsgi = self.app.wsgi()
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
[2022-07-30 14:35:47]     self.callable = self.load()
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
[2022-07-30 14:35:47]     return self.load_wsgiapp()
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
[2022-07-30 14:35:47]     return util.import_app(self.app_uri)
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app
[2022-07-30 14:35:47]     mod = importlib.import_module(module)
[2022-07-30 14:35:47]   File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
[2022-07-30 14:35:47]     return _bootstrap._gcd_import(name[level:], package, level)
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
[2022-07-30 14:35:47]   File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
[2022-07-30 14:35:47] ModuleNotFoundError: No module named 'backend-server'

相关文件

wsgi.py

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config")
os.environ.setdefault("DJANGO_CONFIGURATION", "Production")

from configurations.wsgi import get_wsgi_application  # noqa

application = get_wsgi_application()

Dockerfile

FROM python:3.8
ENV PYTHONUNBUFFERED 1

# Allows docker to cache installed dependencies between builds
COPY ./requirements.txt requirements.txt
RUN pip install -r requirements.txt

# Adds our application code to the image
WORKDIR /code

EXPOSE 8000

# Run the production server
CMD newrelic-admin run-program gunicorn --bind localhost:$PORT --access-logfile - backend-server.wsgi:application

目录结构

monorepo/backend-server
├── Dockerfile
├── README.md
├── config
│   ├── common.py
│   ├── local.py
│   └── production.py
├── docker-compose.yml
├── manage.py
├── requirements.txt
├── urls.py
├── wait_for_postgres.py
└── wsgi.py

解决方案

问题根源

  1. 缺少代码复制步骤:Dockerfile仅复制了requirements.txt,未将backend-server目录下的应用代码同步到容器的/code工作目录,导致gunicorn无法找到相关文件。
  2. gunicorn路径错误:wsgi.py直接位于backend-server根目录,容器工作目录为/code时,gunicorn命令中无需添加backend-server.前缀——该前缀会被当作Python模块名查找,从而引发模块不存在的错误。

修复后的Dockerfile

FROM python:3.8
ENV PYTHONUNBUFFERED 1

# 缓存依赖安装
COPY ./requirements.txt requirements.txt
RUN pip install -r requirements.txt

# 设置工作目录并复制应用代码
WORKDIR /code
COPY . /code/

EXPOSE 8000

# 启动gunicorn服务器
CMD newrelic-admin run-program gunicorn --bind localhost:$PORT --access-logfile - wsgi:application

额外验证(可选)

如果修复后仍有问题,可在Dockerfile中添加环境变量确保当前目录在Python路径中:

ENV PYTHONPATH=/code

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:06:27