【问题标题】:Unable to Run Celery and celery beat using docker in django application (Unable to load celery application)无法在 django 应用程序中使用 docker 运行 Celery 和 celery beat(无法加载 celery 应用程序)
【发布时间】:2021-04-08 08:59:40
【问题描述】:

当我尝试运行我在没有 docker 的情况下使用的应用程序时,它运行良好,但在 docker-compose 中我收到此错误:

               | Error: Invalid value for '-A' / '--app': 
               | Unable to load celery application.
               | The module sampleproject was not found.

我的 docker-compose 文件

  app:
    container_name: myapp
    hostname: myapp
    build:
      context: .
      dockerfile: Dockerfile
    image: sampleproject
    tty: true
    command: >
      bash -c "
        python manage.py migrate &&
        python manage.py runserver 0.0.0.0:8000
      "
    env_file: .env
    ports:
      - "8000:8000"
    volumes:
      - .:/project
    depends_on:
      - database
      - redis

  redis:
    image: redis:alpine

  celery:
    build:
      context: ./
      dockerfile: Dockerfile
    command: celery  -A sampleproject worker -l info
    depends_on:
     - database
     - redis

  celery-beat:
    build: .
    command: celery -A sampleproject beat -l info
    depends_on:
      - database
      - redis
      - celery

我的 Docker 文件

FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt --no-cache-dir \
  && rm -rf requirements.txt

RUN mkdir /project
WORKDIR /project

我的文件夹结构是这样的:

【问题讨论】:

  • 从你的Dockerfile 看来你没有添加你的应用程序源代码(除非它作为一个包安装在你的requirements.txt 中,我在这里看不到
  • @ItayB 先生是哪个应用程序?你在说 docker-compose app 吗?
  • app = Celery('my_app', broker='amqp://guest@localhost//')
  • 我想把这个放在哪里?我在celery.py 中有这个os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sampleproject.settings") app = Celery("sampleproject") @ItayB
  • 尝试检查 compose 后正在运行的 celery 容器,以检查是否确实存在 sampleproject 文件夹。确保执行 celery 命令的上下文是预期的,sampleproject 应该是一个子文件夹。

标签: django docker docker-compose celery django-celery-beat


【解决方案1】:

我遇到了同样的问题,我们找到了解决方案。事实上,celery 抱怨无法运行是对的,因为它需要一个应用程序的实例。

为此,只需在docker-compose .yaml文件中添加volume指令,指向项目文件夹,以防进入服务celery和celery-beat。

示例:

   app:
    container_name: myapp
    hostname: myapp
    build:
      context: .
      dockerfile: Dockerfile
    image: sampleproject
    tty: true
    command: >
      bash -c "
        python manage.py migrate &&
        python manage.py runserver 0.0.0.0:8000
      "
    env_file: .env
    ports:
      - "8000:8000"
    volumes:
      - .:/project
    depends_on:
      - database
      - redis

  redis:
    image: redis:alpine

  celery:
    build:
      context: ./
      dockerfile: Dockerfile
    command: celery  -A sampleproject worker -l info
    volumes:
      - .:/project
    depends_on:
     - database
     - redis

  celery-beat:
    build: .
    command: celery -A sampleproject beat -l info
    volumes:
      - .:/project
    depends_on:
      - database
      - redis
      - celery

所以当 celery 容器被执行时,它会看到有一个卷并且会毫无问题地执行项目。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2021-11-14
    • 1970-01-01
    • 2016-02-29
    • 2021-07-10
    • 2016-09-20
    • 2019-11-15
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多