I’m running a Flask application with Celery for submitting sub-processes using docker-compose. However I cannot make Celery work when trying to run it in a different container.
If I run Celery in the same container I’m running the flask app it works, but feels like the wrong way, I’m coupling two different things in one container, by adding this in the startup script before the flask app runs:
nohup celery worker -A app.controller.engine.celery -l info &
However if I add Celery as a new container in my docker-compose.yml it doesn’t work. This is my config:
(..)
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
(..)
And this is the start-celery.sh:
#!/bin/bash
source ./env/bin/activate
cd ..
celery worker -A app.controller.engine.celery -l info
Its logs:
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.
And that’s all, processes are not submited to it.
What can be missing?
celery worker -A app.controller.engine.celery inspect registeredto see if your tasks are registered?