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

Docker-Compose部署Django+Redis+Celery报错:celery不在$PATH中

问题描述

尝试用docker-compose部署Django+Redis+Celery项目时,Celery容器启动失败,报错exec: "celery": executable file not found in $PATH。

docker-compose.yml 内容

version: "3.9"

services:
  db: 
    container_name: my_table_postgres
    image: postgres
    ports:
      - 5432/tcp
    volumes:
      - my_table_postgres_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=my_table_postgres
      - POSTGRES_USER=dev
      - POSTGRES_PASSWORD=Ieyh5&RIR48!&8fc

  redis: 
    container_name: redis
    image: redis

  my_table:
    container_name: my_table
    build: .
    command: python manage.py runserver 0.0.0.0:5000
    volumes:
      - .:/api
    ports:
      - "5000:5000"
    depends_on:
      - db
      - redis

  celery:
    restart: always
    build:
      context: .
    command: ['celery', '-A', 'mytable', '-l', 'INFO']
    volumes:
      - .:/api
    container_name: celery
    depends_on:
      - db
      - redis
      - my_table

volumes:
  my_table_postgres_db:
  redis_data:

Dockerfile 内容

FROM python:3.11

# Managing user
RUN mkdir /mytable
RUN useradd -ms /bin/bash devuser
USER devuser
COPY . /mytable
WORKDIR /mytable

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

COPY --chown=devuser:devuser requirements.txt requirements.txt
RUN pip install --user --default-timeout=1000 --upgrade pip
RUN pip install --user --default-timeout=1000 -r requirements.txt

EXPOSE 5000

#ENV PATH="/home/devuser/.local/bin"

COPY --chown=devuser:devuser . .

# Run manage.py runserver when the container launches
CMD ["python3", "manage.py", "runserver"]

错误信息

Recreating eda7aad3f246_celery ... error

ERROR: for eda7aad3f246_celery  Cannot start service celery: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "celery": executable file not found in $PATH: unknown

ERROR: for celery  Cannot start service celery: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "celery": executable file not found in $PATH: unknown        
ERROR: Encountered errors while bringing up the project.
解决方案

问题根源是使用pip install --user安装Celery后,其可执行文件位于/home/devuser/.local/bin目录,但该目录未被加入系统$PATH,导致容器无法找到celery命令。可通过以下两种方式解决:

方法1:开启Dockerfile中的PATH环境变量配置

取消Dockerfile中该行的注释,将Celery所在目录加入环境变量:

ENV PATH="/home/devuser/.local/bin:$PATH"

方法2:直接使用Celery的绝对路径执行

在docker-compose.yml的celery服务中,修改command为绝对路径:

command: ['/home/devuser/.local/bin/celery', '-A', 'mytable', '-l', 'INFO']

额外优化建议

  • my_table服务的卷挂载路径./api与Dockerfile中的工作目录/mytable不一致,建议统一为- .:/mytable,避免代码加载异常。
  • Celery服务无需依赖my_table,可移除depends_on中的my_table项,简化启动依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:20:36