首页 文章

Redis Docker Django - 错误111连接被拒绝

提问于
浏览
2

我想知道我做错了什么,但是尽管控制台日志消息告诉我Redis正在运行并接受连接(事实上,当我做 docker ps 时,我可以看到容器正在运行),我仍然会收到有关拒绝连接的错误 . 我甚至做到了

docker exec -it <redis_container_name> redis-cli
ping

并看到回应是 PONG .

以下是我的_2742535中的Celery设置:

BROKER_URL = 'redis://localhost:6379/0'
BROKER_TRANSPORT = 'redis'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = "UTC"

以下是我的 docker-compose.yml 中的Redis容器设置:

redis:
    image: redis
    ports:
        - "6379:6379"

我记得也将 redis 容器与我的 web 容器相关联 . 我可以启动服务器就好了,但是当我尝试将任何内容上传到网站时,我收到连接拒绝错误 . 究竟出了什么问题?

EDIT :我记得使用VBoxManage进行端口转发,这样我就可以访问我的浏览器并访问我的网站 localhost:8000 ,所以它没有't seem like I need to use the VM'的IP而不是 localhost 我的 settings.py .

EDIT 2 :如果我在设置中使用 docker-machine VM的IP地址或Redis容器的IP地址替换 localhost ,那么当我上传文件时,我的网站上很快就会收到错误的成功消息,但是然后没有任何实际上传 . 底层上传函数 insertIntoDatabase() 使用 delay .

2 回答

  • 3

    Django是否在一个与Redis容器相连的单独容器中运行?如果是这样,你应该有一些带有Ip和端口的环境变量,Django应该使用它来连接到Redis容器 . 将BROKER_URL设置为使用redis Ip和port env vars,您应该开展业务 . 同样适用于RESULT_BACKEND .

    env vars的参考文档在这里:Docker Compose docs

    以下是我们如何在OfferUp的一个项目中使用自动添加的env变量的示例代码:

    BROKER_TRANSPORT = "redis"
    _REDIS_LOCATION = 'redis://{}:{}'.format(os.environ.get("REDIS_PORT_6379_TCP_ADDR"), os.environ.get("REDIS_PORT_6379_TCP_PORT"))
    BROKER_URL = _REDIS_LOCATION + "/0"
    CELERY_RESULT_BACKEND = _REDIS_LOCATION + "/1"
    
  • 2

    我刚刚遇到了类似的问题,因为将Celery从v3.1更新到v4并且根据这个tutorial需要在 settings.py 中将 BROKER_URL 更改为 CELERY_BROKER_URL

    settings.py part

    CELERY_BROKER_URL = 'redis://cache:6379/0'
    CELERY_RESULT_BACKEND = 'redis://cache:6379/0'
    

    docker-compose.yml part

    version: '2'
    services:
      web:
        container_name: django-container
        *******
        other options
        *******
    
        depends_on:
          - cache
          - db
    
      cache:
        container_name: redis-container
        restart: always
        image: redis:latest
    

相关问题