I am currently trying to deploy a basic task queue and frontend using celery, rabbitmq and flower on Kubernetes (and minikube). I am following the example here:
https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/celery-rabbitmq
I can get everything to work following the instructions; however, when I run docker build
on the Dockerfile
in ./celery-app-add
, push the image to my own repository and replace endocode/celery-app-add
with <mine>/celery-app-add
, I can't get the example to run anymore. I am assuming that the Dockerfile
in source control is wrong because if I pull the endocode/celery-app-add
image and run bash in the image, it loads in as the root
user (as opposed to user
with <mine>/celery-app-add
Dockerfile
).
After booting up all of the containers and services, I can see the following in the logs:
2016-08-18T21:05:44.846591547Z AttributeError: 'ChannelPromise' object has no attribute '__value__'
The celery logs show:
2016-08-19T01:38:49.933659218Z [2016-08-19 01:38:49,933: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@rabbit:5672//: [Errno -2] Name or service not known.
If I echo RABBITMQ_SERVICE_SERVICE_HOST
within the container, it appears as the same host as indicated in the rabbitmq-service
after running kubectl get services
.
I am not really sure where to go from here. Any suggestions are appreciated. Also, I added USER root
(won't run this in production, don't worry) to my Dockerfile
and still ran into the same issues above. docker history endocode/celery-app-add
hasn't been too helpful either.
Turns out the problem is based around this celery issue. Celery prefers to use CELERY_BROKER_URL
over anything that can be set in the app configuration. To fix this, I unset CELERY_BROKER_URL
in the Dockerfile
and it picked up my configuration correctly.