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']
所以我正在使用 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']