Django+Redis+Celery+Flower容器化启动失败问题求助
问题排查与解决
核心错误原因
你遇到的executable file not found in $PATH错误,根源是docker-compose中celery和flower服务的entrypoint格式错误:
- 当使用数组形式定义entrypoint时,Docker会将数组第一个元素当作可执行文件,后续元素作为参数。你把整个celery命令写成单个字符串元素,Docker会尝试寻找名为
celery -A core worker -P eventlet --autoscale=10,1 -l INFO的可执行文件,显然不存在。
修复步骤
1. 修正celery服务的entrypoint配置
在docker-compose.yml的celery服务中,将entrypoint拆分为独立的命令和参数:
celery: container_name: celery restart: unless-stopped env_file: .env volumes: - npm:/app - ./.env:/app/.env:ro build: context: . dockerfile: ./Dockerfile networks: - npm depends_on: - redis entrypoint: - celery - -A - core - worker - -P - eventlet - --autoscale=10,1 - -l - INFO
2. 修正flower服务的entrypoint配置
同样拆分flower的entrypoint为独立元素:
flower: container_name: flower restart: unless-stopped ports: - "5555:5555" env_file: .env volumes: - npm:/app - ./.env:/app/.env:ro build: context: . dockerfile: ./Dockerfile networks: - npm depends_on: - redis - celery entrypoint: - celery - -b - redis://redis:6379 - flower
3. 可选优化:保留数据库迁移逻辑(按需选择)
如果希望celery/flower启动前执行数据库迁移,不要覆盖entrypoint,改用command字段替换默认CMD:
celery: # 其他配置不变 entrypoint: ["sh", "entrypoint.sh"] command: - celery - -A - core - worker - -P - eventlet - --autoscale=10,1 - -l - INFO
flower服务同理:
flower: # 其他配置不变 entrypoint: ["sh", "entrypoint.sh"] command: - celery - -b - redis://redis:6379 - flower
注:通常celery worker无需执行迁移,直接覆盖entrypoint即可。
额外验证点
- 确认
requirements.txt已包含celery和flower,你的配置中已满足该条件; - 可进入django容器执行
which celery,验证celery可执行文件路径存在(pip安装后会自动加入环境变量)。
内容的提问来源于stack exchange,提问作者Nahidujjaman Hridoy
相关产品推荐
相关产品推荐

