Docker-Compose部署Dash应用背景回调配置及错误排查求助
Dash Background Callback + Docker Compose 配置指南与问题解决
初始配置疑问解答
1. 是否需要在web服务中安装celery[redis]?
需要。Web服务要通过CeleryManager与Redis通信,向Celery Worker发送任务,因此必须安装celery[redis](或单独安装celery和redis包)。dash[celery]仅包含Dash与Celery的集成依赖,Redis的Python客户端需要额外安装。
2. 如何启动celery_app?是否需要新增worker服务?
推荐新增独立的Celery Worker服务,不要在同一个容器中同时启动gunicorn和celery——容器应遵循单一职责原则,便于扩容、日志管理和故障排查。
- 代码重复问题:不会重复。Web服务和Worker服务可基于同一个自定义Docker镜像(镜像包含所有项目依赖和代码),仅启动命令不同:Web服务启动gunicorn,Worker服务启动celery worker命令,无需重复复制代码。
现有错误解决方案(ModuleNotFoundError: No module named 'redis')
错误原因
自定义镜像中缺少Redis的Python客户端依赖。dash[celery]不包含redis包,而Celery连接Redis必须依赖该库。
解决步骤
- 更新依赖配置文件
在requirements.txt中添加以下内容:
celery[redis]>=5.0 redis>=4.0 dash[celery]>=2.0 # 保留原有项目依赖
- 更新自定义Dockerfile
确保构建镜像时安装所有依赖:
FROM python:3.10-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . # Web服务默认启动命令(可在docker-compose中覆盖) CMD ["gunicorn", "--bind", "0.0.0.0:8050", "proj.visuals.app:server"]
- 调整docker-compose.yml配置
确保Celery Worker服务使用同一镜像,并指定正确的启动命令:
version: '3.8' services: web: build: . command: gunicorn --bind 0.0.0.0:8050 proj.visuals.app:server environment: - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 depends_on: - redis - db celery_worker: build: . command: celery -A proj.visuals.app.celery_app worker --loglevel=info environment: - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 depends_on: - redis - web redis: image: redis:latest ports: - "6379:6379" # 保留原有proxy、db、pgadmin服务配置
- 确认app.py中celery_app配置正确
示例配置:
from dash import Dash from dash.long_callback import CeleryManager import celery REDIS_URL = "redis://redis:6379/0" celery_app = celery.Celery( __name__, broker=REDIS_URL, backend=REDIS_URL ) background_callback_manager = CeleryManager(celery_app) app = Dash(__name__, background_callback_manager=background_callback_manager) server = app.server # 供gunicorn调用的WSGI实例
- 重新构建并启动服务
docker-compose build docker-compose up
内容的提问来源于stack exchange,提问作者winter
相关产品推荐
相关产品推荐

