【问题标题】:Redis on Docker: Error 111 connecting to 0.0.0.0:6379. Connection refusedDocker 上的 Redis:连接到 0.0.0.0:6379 时出现错误 111。拒绝连接
【发布时间】:2021-06-01 13:12:51
【问题描述】:

Python 和 Redis 在我的本地可以很好地协同工作。我尝试将项目 docker 化。

当我 docker-compose up 时,redis 容器工作正常。

> Server initialized
> Ready to accept connections

但是当我在 POSTMAN 中调用请求时,出现以下错误:

Error 111 connecting to 0.0.0.0:6379. Connection refused.

我的设置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://0.0.0.0:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

我的 docker-compose.yml:

redis:
    image: bitnami/redis:latest
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - "6379:6379"

...在 Dockerfile 中:

ENV REDIS_URL=redis://0.0.0.0:6379/1

我错过了什么?

【问题讨论】:

    标签: python django docker redis


    【解决方案1】:

    您使用bitnami/redis:latest 进行redis 设置,因此您肯定在docker-compose.yaml 中有另一个服务来定义您的django 应用程序,然后链接到该redis 容器。

    问题出在这里,你使用redis://0.0.0.0:6379/1从你的django容器连接到redis容器,这是不正确的。

    事实上,如果你没有在你的 compose 文件中定义任何自定义的网络,所有的容器都会在一个默认的网络中,这意味着你的django容器可以通过服务名直接访问你的redis容器。

    一句话,你应该改变

    redis://0.0.0.0:6379/1
    

    redis://redis:6379/1
    

    你可能想看看Networing in Compose

    另外,当您公开 6379 时,将 0.0.0.0 更改为您的 docker 主机的 ip 可能是另一种选择。

    【讨论】:

    • 谢谢,所以你说从 Dockerfile 中删除 ENV 并在我的设置中更改 CACHES 变量?
    • 使用ENVvariable in CACHES取决于你自己的逻辑,关键是0.0.0.0不正确,你可以尝试将两者都改成redis看看。让它工作后,你会发现哪个更适合你,ENVVariable in CACHES
    • 谢谢,它成功了。我还想再添加一件事:在我的 redis.conf 中,我注释掉了 #bind 127.0.0.1 -::1。和保护模式编号。
    猜你喜欢
    • 2019-11-28
    • 2020-03-13
    • 2019-06-16
    • 2016-07-05
    • 2015-12-13
    • 1970-01-01
    • 2017-11-13
    • 2022-01-16
    • 2021-03-25
    相关资源
    最近更新 更多