Docker配置:Celery + RabbitMQ

7
我该如何在Docker容器中运行Celery和RabbitMQ?您能给我指出示例dockerfile或compose文件吗?
这是我的Dockerfile:
FROM python:3.4
ENV PYTHONBUFFERED 1
WORKDIR /tasker
ADD requirements.txt /tasker/
RUN pip install -r requirements.txt
ADD . /tasker/

docker-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

我遇到的问题是无法让Celery保持活动状态或运行,它一直停止运行。

你不能使用celery的docker镜像吗?我也不确定你在Dockerfile中尝试做什么。但有一件事可以肯定的是,它缺少ENTRYPOINT。 - techtabu
3个回答

9
我在将应用程序docker化时遇到了类似的Celery退出问题。您应该在Celery配置中使用Rabbit服务名称(在您的情况下是rabbitmq)作为主机名。也就是说,使用broker_url ='amqp://guest:guest@rabbitmq:5672//'而不是broker_url ='amqp://guest:guest@localhost:5672//'

在我的情况下,主要组件是Flask、Celery和Redis。我的问题在这里,请查看链接,您可能会发现它有用。

2
更新2018年,正如下面评论所述,由Floran Gmehlin提出,Celery镜像现已被正式弃用,取而代之的是官方Python镜像
正如Celery/问题1中所评论的那样:
使用这个镜像似乎很荒谬。如果你有一个应用容器,就像通常在 Django 中一样,你需要再次在这个容器中安装所有依赖项(你在 tasks.py 中导入的东西)。
这就是为什么其他项目(例如 cookiecutter-django)重复使用应用容器 用于 Celery,并且只运行不同的命令(命令:celery ... worker)来针对它运行 docker-compose
注意,现在 docker-compose.yml 文件被称为 local.yml 并使用 start.sh

原始回答:

您可以尝试模拟官方的celery Dockerfile,在CMD ["celery", "worker"]之前进行一些额外的设置。

请参见该镜像的使用方法以正确运行它。

启动一个 Celery 工作进程(RabbitMQ Broker)

$ docker run --link some-rabbit:rabbit --name some-celery -d celery

检查集群的状态。
$ docker run --link some-rabbit:rabbit --rm celery celery status

如果您可以在docker-compose中使用该图像,则可以尝试使用FROM celery来构建自己的起始镜像,而不是FROM python

Celery镜像现已正式弃用,建议使用官方Python镜像:https://hub.docker.com/r/library/celery/。 - Floran Gmehlin
1
@FloranGmehlin 谢谢。我已经将您的评论包含在答案中以增加可见性。 - VonC

1

这是我在docker-compose.yml中使用的内容,对我有效。请查看medium以获取详细信息。

version: '2'
services:
rabbit:
    hostname: rabbit
    image: rabbitmq:latest
    environment:
        - RABBITMQ_DEFAULT_USER=admin
        - RABBITMQ_DEFAULT_PASS=mypass
    ports:
        - "5672:5672"

worker:
    build:
        context: .
        dockerfile: dockerfile
    volumes:
        - .:/app
    links:
        - rabbit
    depends_on:
        - rabbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接