docker 上的 Celery + FastAPI,应用程序容器不与 Celery 同步,因此我无法使用它

Celery + FastAPI on docker, the app container does not sync with Celery thus I can't use it

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

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

我的问题是在 docker 中安装了网络应用 运行ning 并使用了 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-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']