Docker部署Django遇ModuleNotFoundError: No module named 'celery'问题求助
Django + Celery + Docker 出现ModuleNotFoundError: No module named 'celery'的问题解决
问题描述
我已经在本地通过pip install celery安装了Celery,也部署了Redis用于Celery运行。但使用Docker部署Django应用时,执行docker compose up命令出现如下错误:
File "<frozen importlib._bootstrap>", line 1206, in _gcd_import batch_email-web-1 | File "<frozen importlib._bootstrap>", line 1178, in _find_and_load batch_email-web-1 | File "<frozen importlib._bootstrap>", line 1128, in _find_and_load_unlocked batch_email-web-1 | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed batch_email-web-1 | File "<frozen importlib._bootstrap>", line 1206, in _gcd_import batch_email-web-1 | File "<frozen importlib._bootstrap>", line 1178, in _find_and_load batch_email-web-1 | File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked batch_email-web-1 | File "<frozen importlib._bootstrap>", line 690, in _load_unlocked batch_email-web-1 | File "<frozen importlib._bootstrap_external>", line 940, in exec_module batch_email-web-1 | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed batch_email-web-1 | File "/Batch_Email/Batch_Email/__init__.py", line 1, in <module> batch_email-web-1 | from .celery import app as celery_app batch_email-web-1 | File "/Batch_Email/Batch_Email/celery.py", line 4, in <module> batch_email-web-1 | from celery import Celery batch_email-web-1 | ModuleNotFoundError: No module named 'celery'
此前未安装Celery时,docker compose up可以正常启动Django服务器,请问该错误的原因是什么?如何解决?
错误原因
- 本地通过
pip install celery安装的依赖仅存在于本地Python环境,Docker容器是独立的隔离环境,不会自动继承本地已安装的包。 - 你修改了Django项目的
__init__.py并新增了celery.py文件,引入了Celery依赖,但Docker构建镜像时没有安装该依赖,导致容器启动时无法找到Celery模块。
解决方法
更新项目依赖清单
将Celery和Redis相关依赖添加到项目的requirements.txt文件中(如果使用其他依赖管理工具如pyproject.toml或Pipfile,需对应更新):celery>=5.3.0 redis>=5.0.0重新构建Docker镜像
确保你的Dockerfile包含安装依赖的步骤,示例如下:COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt然后执行命令重新构建镜像,确保新依赖被安装到容器环境:
docker compose build --no-cache验证Docker Compose配置(可选)
如果你的Celery Worker是独立的服务,需确保Worker服务使用的镜像同样安装了Celery依赖,并且能正确连接到Redis服务。例如在docker-compose.yml中,Worker服务应与Web服务使用相同的镜像或构建配置。
内容的提问来源于stack exchange,提问作者lony235
相关产品推荐
相关产品推荐

