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,你可能会发现它有用。
如何在 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 年更新为
正如 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 withdocker-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 问题是