【问题标题】:Cannot connect to redis in docker and django无法连接到 docker 和 django 中的 redis
【发布时间】:2021-10-12 07:03:20
【问题描述】:

我已经使用这个命令运行了一个 redis 容器:docker run -d --name redis -p 6379:6379 redis

我已经使用以下命令运行了我的 Django 应用程序:docker run -it -p 8000:8000 voucher

我的连接redis url是redis://redis:6379/1

但我似乎无法连接到 redis,这是我的错误: redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name or service not known.

PS:我没有使用docker-compose

【问题讨论】:

  • 为什么不使用 docker-compose。它真的很容易设置
  • 我想了解双方。 @S.Sachith
  • 哦,那很好:)

标签: django docker


【解决方案1】:

两个 Container 必须在同一个 Docker network 中才能通过 Container 名称进行通信。

docker run -d --name redis --network your-network -p 6379:6379 redis

docker run -it --network your-network -p 8000:8000 voucher

【讨论】:

  • 正确,但也许您可以提到 your-network 必须使用 docker network create ... 创建才能被引用(为了完整性)
  • 将它们连接到桥接网络但没有工作
【解决方案2】:

我已经通过将我的 redis 连接 url 更改为 redis://172.17.0.2:6379/1。但这是为什么呢?如何使用容器 名称而不是 IP?

这是您的主机 IP。您有几种方法可以解决您的问题。

1 - 像以前一样使用硬编码的 IP。

2 - 使用 docker link 连接应用程序,例如:

docker run --name my-redis-application --link my-redis-container:redis -d centos

3 - 你可以创建一个 redis.conf,内容如下:

bind 0.0.0.0

并在启动时使用它,例如:

docker run -v $(pwd):/usr/local/etc/redis/ --name redis -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf

4 - 你可以使用 docker-compose 来更好地链接,就像在 #2 中一样。

【讨论】:

    【解决方案3】:

    我认为更好的选择是 docker-compose。如果你喜欢使用 docker-compose,这里就是答案。

    docker-compose.yml

    version: "3.8"
    services :
      redis:
        image : redis
        container_name : redis
        restart : unless-stopped
        ports: 
          - 6379:6379 
      voucher:
        image : voucher
        ports:
          - 8000:8000
        depends_on:
          - redis
    

    现在您可以使用服务名称“redis”连接到 Redis。

    【讨论】:

      【解决方案4】:

      你是否在 .env 文件中定义了 redis 信息? 这也可能导致连接错误。

      /.env

      REDIS_HOST=127.0.0.1
      REDIS_PASSWORD=yourpassword/blank
      REDIS_PORT=6379
      

      【讨论】:

      • 是的,我已经在 .env 文件中定义了它们,但这不是问题。
      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案5】:

      我已经通过将我的 redis 连接 URL 更改为 redis://172.17.0.2:6379/1 来解决这个问题。
      但这是为什么呢? 如何使用容器名称而不是 IP?

      【讨论】:

      • 你在哪里使用容器名称?
      • 我的容器名称是redis,我的连接网址是redis://redis:6379/1
      • 为了使用 docker 的 DNS,您需要将容器放在 default bridge network 中。你检查了吗?
      猜你喜欢
      • 2019-01-08
      • 2018-07-12
      • 2023-02-10
      • 2015-02-06
      • 2022-01-07
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多