Docker 配置:Celery + RabbitMQ

Docker config : Celery + RabbitMQ

如何在 docker 容器中 运行 Celery 和 RabbitMQ?你能指点我样本 docker 文件或撰写文件吗?

这是我的:

Docker 文件:

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 存活或 运行ning。它一直在退出。

2018 年更新为 by Floran Gmehlin, The celery image is now officially deprecated in favor of the official python image

正如 celery/issue 1 中评论的那样:

Using this image seems ridiculous. If you have an application container, as you usually have with Django, you need all dependencies (things you import in tasks.py) installed in this container again.

That's why other projects (e.g. cookiecutter-django) reuse the application container for Celery, and only run a different command (command: celery ... worker) against it with docker-compose.

注意,现在 docker-compose.yml 被称为 local.yml and use start.sh


原回答:

您可以尝试模拟官方 celery Dockerfile,它在 CMD ["celery", "worker"].

之前做了更多设置

请参阅 the usage of that image 至 运行 正确。

start a celery worker (RabbitMQ Broker)

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

check the status of the cluster

$ docker run --link some-rabbit:rabbit --rm celery celery status

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

我在 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

我在对应用程序进行 docker 化时遇到了类似的 Celery 退出问题。您应该使用 rabbit 服务名称(在您的情况下为 rabbitmq),因为您的 celery configuration.That 中的主机名是
使用 broker_url = 'amqp://guest:guest@rabbitmq:5672//' 而不是 broker_url = 'amqp://guest:guest@localhost:5672//'

在我的例子中,主要组件是 Flask、Celery 和 Redis.My 问题是 请检查 link,你可能会发现它有用。