docker/芹菜:不能让芹菜运行

我不能让我的芹菜工人不断地听默认队列。 芹菜不断退出。

$: docker-compose up Starting tasker_rabbitmq_1 Starting tasker_celery_1 Attaching to tasker_rabbitmq_1, tasker_celery_1 tasker_celery_1 exited with code 1 rabbitmq_1 | rabbitmq_1 | RabbitMQ 3.6.1. Copyright (C) 2007-2016 Pivotal Software, Inc. rabbitmq_1 | ## ## Licensed under the MPL. See http://www.rabbitmq.com/ rabbitmq_1 | ## ## rabbitmq_1 | ########## Logs: /var/log/rabbitmq/rabbit@0bcd2c4762eb.log rabbitmq_1 | ###### ## /var/log/rabbitmq/rabbit@0bcd2c4762eb-sasl.log rabbitmq_1 | ########## rabbitmq_1 | Starting broker... completed with 6 plugins. 

我正在尝试构build一个具有独立作业层作为单独部署的作业容器的应用程序。 所以架构是:

  1. EBS上的Web / App层( Django)
  2. 作业层: Celery + RabbitMQ作为Docker容器

这是我的:

文件夹结构:

 -tasker -tasker -tasks.py -celeryconfig.py - __init__.py -Dockerfile -docker-compose.yml -requirements.txt 

tasks.py:

 from celery import Celery from celery import task celery = Celery('tasks', broker='amqp://guest@localhost//') import os @celery.task def add(x, y): return x + y 

Dockerfile:

 FROM python:3.4 ENV PYTHONBUFFERED 1 WORKDIR /tasker ADD requirements.txt /tasker/ RUN pip install -r requirements.txt ADD . /tasker/ 

泊坞窗,compose.yml:

 rabbitmq: image: tutum/rabbitmq environment: - RABBITMQ_PASS=mypass ports: - "5672:5672" - "15672:15672" celery: build: . command: celery worker --app=tasker.tasks volumes: - .:/tasker links: - rabbitmq:rabbit 

有什么我失踪? 芹菜为什么用代码1退出?

1)将芹菜安装到python Docker镜像或使用https://hub.docker.com/r/library/celery/

2)添加完整的地址与rabbitmq密码在行中:

celery = Celery('tasks', broker='amqp://guest:mypass@rabbit//')

当您尝试调出芹菜容器时,RabbitMQ容器不可用。

处理这个问题的快速和肮脏的方法是手动转动rabbitmq在第一个-d标志的背景:

 docker-compose up -d rabbitmq 

等待几秒钟,然后:

 docker-compose up celery 

处理启动顺序的正确方法logging在这里 – > https://docs.docker.com/compose/startup-order/


编辑

我正在扩大我的答案一点点如何完成这个'等待它'

 celery: build: . command: ./wait-for-it.sh rabbitmq:5672 --timeout=2 --strict -- celery worker -A tasker.tasks volumes: - .:/tasker links: - rabbitmq 

编辑2

我也刚刚注意到,在你的撰写文件中,链接指令下的容器名称是错误的。 应该只是rabbitmq 。 这也会影响您的容器打开的顺序。