首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头/芹菜:不能跑芹菜

码头/芹菜:不能跑芹菜
EN

Stack Overflow用户
提问于 2016-06-16 19:20:49
回答 2查看 3.3K关注 0票数 6

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

代码语言:javascript
复制
$: 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.

我正在尝试构建一个应用程序,它有一个单独的作业层作为一个单独部署的作业容器。所以建筑是:

  1. 网络/应用程序层(Django)在EBS上的应用
  2. 工作层:芹菜+ RabbitMQ as Docker容器

这就是我所拥有的:

文件夹结构:

代码语言:javascript
复制
-tasker
    -tasker
        -tasks.py
        -celeryconfig.py
        - __init__.py
    -Dockerfile
    -docker-compose.yml
    -requirements.txt

tasks.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
FROM python:3.4
ENV PYTHONBUFFERED 1
WORKDIR /tasker
ADD requirements.txt /tasker/
RUN pip install -r requirements.txt
ADD . /tasker/

docker-compose.yml:

代码语言:javascript
复制
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退出呢?

EN

回答 2

Stack Overflow用户

发布于 2016-09-26 16:50:01

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

2)在rabbitmq中添加完整的入口,并在行中添加密码:

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

票数 1
EN

Stack Overflow用户

发布于 2017-05-18 21:45:59

当您试图打开芹菜容器时,RabbitMQ容器不可用。

处理这一问题的快速和肮脏的方法是首先使用-d标志在后台手动转动rabbitmq:

代码语言:javascript
复制
docker-compose up -d rabbitmq

等几秒钟,然后:

代码语言:javascript
复制
docker-compose up celery

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

编辑

关于如何用“等一下”实现这一点,我正在扩展我的答案。

代码语言:javascript
复制
celery:
  build: .
  command: ./wait-for-it.sh rabbitmq:5672 --timeout=2 --strict -- celery worker -A tasker.tasks
  volumes:
    - .:/tasker
  links:
    - rabbitmq

编辑2

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

编辑3

您可能还需要向rabbitmq容器添加一个主机名:

代码语言:javascript
复制
rabbitmq:
  image: tutum/rabbitmq
  hostname: rabbitmq
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37867722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档