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

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必须依赖该库。

解决步骤

  1. 更新依赖配置文件
    在requirements.txt中添加以下内容:
celery[redis]>=5.0
redis>=4.0
dash[celery]>=2.0
# 保留原有项目依赖
  1. 更新自定义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"]
  1. 调整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服务配置
  1. 确认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实例
  1. 重新构建并启动服务
docker-compose build
docker-compose up

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:15:53