docker - docker上的Celery + FastAPI,应用程序容器不与Celery同步,因此我无法使用它
问题描述
所以我正在使用 FastAPI 构建一个 webapp。我使用 Celery 来运行一些后台任务。我的代码在我的本地开发机器上运行良好,但是当我尝试对其进行 docker 化时,似乎运行在容器上的 FastAPI 应用程序无法与 celery 同步。例如我有 4 个容器:
如果我在我的计算机上本地启动 webapp,并且不启动 padel-checker-web-1 容器而只使用其他 3 个容器,则 docker 上的 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-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']
推荐阅读
- sql - 生成 SessionID - 从最后一个值递增
- arrays - 在 Typescript 中创建重复元组类型
- c++ - 创建新 QDialog 对象的安全方法
- robotframework - 四舍五入到下一个整数 - Robotframework
- r - 使用条件将行合并为一个,并将一行中的值替换为另一行中的值
- c - 具有很多条件的 if 语句或 switch 语句的替代方法
- reactjs - react-bootstrap-table-next 依赖树问题
- curl - 使用变量时使用 RobotFramework 和 Curl 响应
- javascript - 有时会出现错误“match.map 不是函数” - 在反应中
- php - CakePHP 4 - 如何验证需要将数据保存到多个表的表单