Docker 上的 Redis:连接到 0.0.0.0:6379 时出现错误 111。连接被拒绝

tol*_*lga 2 python django redis docker

Python 和 Redis 在我的本地运行良好。我尝试将项目 Docker 化。

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

> Server initialized
> Ready to accept connections
Run Code Online (Sandbox Code Playgroud)

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

Error 111 connecting to 0.0.0.0:6379. Connection refused.
Run Code Online (Sandbox Code Playgroud)

我的设置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://0.0.0.0:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 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"
Run Code Online (Sandbox Code Playgroud)

...以及在 Dockerfile 中:

ENV REDIS_URL=redis://0.0.0.0:6379/1
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

atl*_*ine 5

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

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

事实上,如果您没有在 compose 文件中定义任何自定义网络,则所有容器都将位于默认网络中,这意味着您的django容器可以直接使用服务名称访问您的redis容器。

一句话,你应该改变

redis://0.0.0.0:6379/1
Run Code Online (Sandbox Code Playgroud)

redis://redis:6379/1
Run Code Online (Sandbox Code Playgroud)

您可能想看看Compose 中的网络

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