【问题标题】:Celery + FastAPI on docker, the app container does not sync with Celery thus I can't use itdocker上的Celery + FastAPI,应用程序容器不与Celery同步,因此我无法使用它
【发布时间】:2021-11-09 15:19:23
【问题描述】:

所以我正在使用 FastAPI 构建一个 webapp。我使用 Celery 来运行一些后台任务。 我的代码在我的本地开发机器上运行良好,但是当我尝试对其进行 docker 化时,似乎运行在容器上的 FastAPI 应用程序无法与 celery 同步。例如我有 4 个容器:

如果我在我的计算机上本地启动 webapp,并且不启动 padel-checker-web-1 容器而只使用其他 3 个容器,则 d​​ocker 上的 celery 会与它同步并正常工作。

我的问题是 webapp 在 docker 中运行并使用 celery,它们只是不同步。

我正在粘贴我的 docker-compose.yml 以查看是否有人可以为我指明正确的方向:

version: '3.9'

services:
  web: &app
    build: ./
    command: pipenv run python -m app.main
    networks:
      - backend-tier
    ports:
      - "8000:8000"
    depends_on:
      - worker
  rabbitmq:
    image: rabbitmq:3.9-management
    environment:
      - RABBITMQ_DEFAULT_USER=andre
      - RABBITMQ_DEFAULT_PASS=secret
    networks:
      - backend-tier
    volumes:
      - ./config/rabbitmq/rabbit.conf:/etc/rabbit/rabbit.conf
    ports:
      # The rabbitMQ management plugin - running on http://localhost:15672
      - "15672:15672"
      - "5672:5672"
  worker:
    <<: *app
    environment:
      CELERY_BROKER_URL: "amqp://andre:secret@rabbitmq/"
    ports: []
    command: ['pipenv', 'run', 'celery', '-A', 'app.feed.celery_worker.celery', 'worker', '-l', 'INFO']
    depends_on:
      - rabbitmq
    networks:
      - backend-tier
  flower:
    <<: *app
    environment:
      CELERY_BROKER_URL: "amqp://andre:secret@rabbitmq/"
    networks:
      - backend-tier
    ports:
      - "5555:5555"
    depends_on:
      - rabbitmq
      - worker
    command: ['pipenv', 'run', 'celery', 'flower']

networks:
  backend-tier:
    driver: bridge

如果我尝试使用容器,调用任何 task.delay() 都会挂起。

【问题讨论】:

    标签: docker celery fastapi


    【解决方案1】:

    我已经修复了我的 docker-compose.yml,我猜是depends_on:

    version: '3.9'
    
    services:
      web: &app
        build: ./
        command: pipenv run python -m app.main # && pipenv run celery -A app.feed.celery_worker.celery worker -l INFO
        environment:
          - CELERY_BROKER_URL=amqp://andre:secret@rabbitmq/
        ports:
          - "8000:8000"
        depends_on:
          - rabbitmq
      rabbitmq:
        image: rabbitmq:3.9-management
        environment:
          - RABBITMQ_DEFAULT_USER=andre
          - RABBITMQ_DEFAULT_PASS=secret
        volumes:
          - ./config/rabbitmq/rabbit.conf:/etc/rabbit/rabbit.conf
        ports:
          # The rabbitMQ management plugin - running on http://localhost:15672
          - "15672:15672"
          - "5672:5672"
      worker:
        <<: *app
        environment:
          - CELERY_BROKER_URL=amqp://andre:secret@rabbitmq/
          - C_FORCE_ROOT=1
        ports: []
        command: ['pipenv', 'run', 'celery', '-A', 'app.feed.celery_worker.celery', 'worker', '-l', 'INFO']
        depends_on:
          - rabbitmq
          - web
      flower:
        <<: *app
        environment:
          CELERY_BROKER_URL: "amqp://andre:secret@rabbitmq/"
        ports:
          - "5555:5555"
        depends_on:
          - rabbitmq
          - worker
        command: ['pipenv', 'run', 'celery', 'flower']
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      • 2019-02-17
      相关资源
      最近更新 更多