如何在docker容器中运行Celery和RabbitMQ?你能指出我示例 dockerfile 或撰写文件吗?
这是我所拥有的:
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 退出问题。您应该在芹菜配置中使用兔子服务名称(在您的情况下为rabbitmq
)作为主机名。也就是说,
使用broker_url = 'amqp://guest:guest@rabbitmq:5672//'
而不是broker_url = 'amqp://guest:guest@localhost:5672//'
.
就我而言,主要组件是烧瓶,芹菜和 Redis.My 问题在这里请检查链接,您可能会发现它很有用。
更新 2018,正如 Floran Gmehlin 在下面评论的那样,芹菜图像现已正式弃用,取而代之的是官方的 python 图像。
正如芹菜/问题 1 所评论的那样:
使用这个图像似乎很荒谬。如果你有一个应用程序容器,就像你通常使用 Django 一样,你需要再次将所有依赖项(你在
tasks.py
中导入的东西)安装在这个容器中。这就是为什么其他项目(例如 cookiecutter-django)重用 Celery 的应用程序容器,并且只使用
docker-compose
对它运行不同的命令(命令:celery ... worker
)。
请注意,现在docker-compose.yml
称为local.yml
并使用start.sh
。
原答案:
您可以尝试模拟官方的芹菜 Dockerfile,它在CMD ["celery", "worker"]
之前会进行更多设置。
查看该映像的用法以正确运行它。
启动芹菜工人(RabbitMQ 经纪人)
$ docker run --link some-rabbit:rabbit --name some-celery -d celery
检查群集的状态
$ docker run --link some-rabbit:rabbit --rm celery celery status
如果您可以在 docker 编写中使用该映像,那么您可以尝试构建自己的起始FROM celery
而不是FROM python
。
我在docker-compose.yml中使用的东西。 它对我有用。 检查此介质中的详细信息
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