问题 运行 celery 在与 Flask 应用程序不同的 docker 容器中
Problem running celery in a different docker container than the Flask app
我正在 运行使用 Celery 构建一个 Flask 应用程序,以便使用 docker-compose 提交子流程。
但是,当我尝试 运行 在不同的容器中时,我无法让 Celery 工作。
如果我在同一个容器中 运行 Celery 我正在 运行 烧瓶应用程序它工作,但感觉是错误的方式,我将两个不同的东西耦合在一个容器中,通过在烧瓶应用程序 运行s:
之前的启动脚本中添加它
nohup celery worker -A app.controller.engine.celery -l info &
但是,如果我在 docker-compose.yml 中将 Celery 添加为新容器,则它不起作用。这是我的配置:
(..)
engine:
image: engine:latest
container_name: engine
ports:
- 5000:5000
volumes:
- $HOME/data/engine-import:/app/import
depends_on:
- mongo
- redis
environment:
- HOST=localhost
celery:
image: engine:latest
environment:
- C_FORCE_ROOT=true
command: ["/bin/bash", "-c", "./start-celery.sh"]
user: nobody
depends_on:
- redis
(..)
这是开始-celery.sh:
#!/bin/bash
source ./env/bin/activate
cd ..
celery worker -A app.controller.engine.celery -l info
它的日志:
INFO:engineio:Server initialized for eventlet.
INFO:engineio:Server initialized for threading.
[2018-09-12 09:43:19,649: INFO/MainProcess] Connected to redis://redis:6379//
[2018-09-12 09:43:19,664: INFO/MainProcess] mingle: searching for neighbors
[2018-09-12 09:43:20,697: INFO/MainProcess] mingle: all alone
[2018-09-12 09:43:20,714: INFO/MainProcess] celery@8729618bd4bc ready.
仅此而已,流程没有提交给它。
什么可以缺少?
我发现它只有在我将其添加到 celery 服务的 docker-compose 定义中时才有效:
environment:
- C_FORCE_ROOT=true
我想知道为什么我没有得到任何错误。
我正在 运行使用 Celery 构建一个 Flask 应用程序,以便使用 docker-compose 提交子流程。 但是,当我尝试 运行 在不同的容器中时,我无法让 Celery 工作。
如果我在同一个容器中 运行 Celery 我正在 运行 烧瓶应用程序它工作,但感觉是错误的方式,我将两个不同的东西耦合在一个容器中,通过在烧瓶应用程序 运行s:
之前的启动脚本中添加它nohup celery worker -A app.controller.engine.celery -l info &
但是,如果我在 docker-compose.yml 中将 Celery 添加为新容器,则它不起作用。这是我的配置:
(..)
engine:
image: engine:latest
container_name: engine
ports:
- 5000:5000
volumes:
- $HOME/data/engine-import:/app/import
depends_on:
- mongo
- redis
environment:
- HOST=localhost
celery:
image: engine:latest
environment:
- C_FORCE_ROOT=true
command: ["/bin/bash", "-c", "./start-celery.sh"]
user: nobody
depends_on:
- redis
(..)
这是开始-celery.sh:
#!/bin/bash
source ./env/bin/activate
cd ..
celery worker -A app.controller.engine.celery -l info
它的日志:
INFO:engineio:Server initialized for eventlet.
INFO:engineio:Server initialized for threading.
[2018-09-12 09:43:19,649: INFO/MainProcess] Connected to redis://redis:6379//
[2018-09-12 09:43:19,664: INFO/MainProcess] mingle: searching for neighbors
[2018-09-12 09:43:20,697: INFO/MainProcess] mingle: all alone
[2018-09-12 09:43:20,714: INFO/MainProcess] celery@8729618bd4bc ready.
仅此而已,流程没有提交给它。
什么可以缺少?
我发现它只有在我将其添加到 celery 服务的 docker-compose 定义中时才有效:
environment:
- C_FORCE_ROOT=true
我想知道为什么我没有得到任何错误。