如何配置 docker 以将 redis 与 celery 一起使用
Posted
技术标签:
【中文标题】如何配置 docker 以将 redis 与 celery 一起使用【英文标题】:How to configure docker to use redis with celery 【发布时间】:2019-01-09 09:37:13 【问题描述】:docker-compose.yml
version: '3.1'
services:
redis:
image: redis:latest
container_name: rd01
ports:
- '6379:6379'
webapp:
image: webapp
container_name: wa01
ports:
- "8000:8000"
links:
- redis
depends_on:
- redis
celery:
build: .
container_name: cl01
command: celery -A server worker -l info
depends_on:
- redis
我也不觉得我理解链接和依赖,我尝试了不同的组合。
Celery 无法连接到 redis。我收到以下错误 -
[2018-08-01 13:59:42,249: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.
我相信我已经在我的 django 应用程序的 settings.py 中正确设置了代理 URL(webapp 图像)
CELERY_BROKER_URL = 'redis://redis:6379/0'
CELERY_RESULT_BACKEND = 'redis://redis:6379/0'
使用 celery 和 redis 对 django 项目进行 dockerize 的正确方法是什么? TIA。
编辑
celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
app = Celery('server')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: 0!r'.format(self.request))
This is my django project 是重现错误的最简单形式。
【问题讨论】:
您可以添加您的celery
配置设置吗?
@JerinPeterGeorge:你说的是 celery.py 吗?
是的..请添加它
@JerinPeterGeorge 我已经添加了。
【参考方案1】:
您必须在初始化 Celery
类时添加 redis url
,
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
app = Celery('server', broker='redis://redis:6379/0') # Change is here <<<<
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: 0!r'.format(self.request))
更新
[经过长时间的讨论]
将您的docker-compose.yml
更改为
version: '3.1'
services:
redis:
image: redis:latest
container_name: rd01
webapp:
build: .
container_name: wa01
ports:
- "8000:8000"
links:
- redis
depends_on:
- redis
celery:
build: .
volumes:
- .:/src
container_name: cl01
command: celery -A server worker -l info
links:
- redis
和Dockerfile
一样
FROM python:3.6
RUN mkdir /webapp
WORKDIR /webapp
COPY . /webapp
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["/start.sh"]
【讨论】:
这并没有解决它。我觉得问题出在我配置docker-compose.yml
的方式上。因为它在本地运行良好。就像,不使用 docker。
您的问题Cannot connect to amqp://guest:**@127.0.0.1:5672//:
中的错误表示您正在尝试连接到ampq
brocker。
它仍然给出同样的错误。我觉得 celery 没有使用正确的配置文件或 docker 内的任何内容。如果没有 docker,它能够正确识别 redis 代理 url。
你是如何运行 docker-compose 的?
docker-compose up
以上是关于如何配置 docker 以将 redis 与 celery 一起使用的主要内容,如果未能解决你的问题,请参考以下文章