【问题标题】:.NET service can't connect to Redis.NET 服务无法连接到 Redis
【发布时间】:2021-09-02 09:01:38
【问题描述】:

我正在尝试获取一个 .NET API,以便能够连接到我的 docker 网络上的 Redis 实例。这是我得到的:

  • Redis 容器:在自定义 docker 网络 my-network localhost:6379 上启动并运行
  • .NET 服务:尝试在自定义 docker 网络上启动并运行 my-network

(也许?)相关版本控制:

  • Abp.RedisCache 5.4.0
  • StackExchange.Redis 2.1.58

我已经尝试了所有方法,network inspect,向网络添加和删除这两个容器,即使在我的 .NET 代码中使用了特殊的连接字符串标志 resolveDns=true。无论我做什么,我都会得到:

StackExchange.Redis.RedisConnectionException: It was not possible to connect to the redis server(s). UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.1.58.34321

我在这里疯了,Redis 在 docker 网络上的 localhost:6379 启动并运行,为什么 .NET 无法连接?

是的,我已经通过了一个自定义 redis.conf,其中也有 bind 0.0.0.0

【问题讨论】:

  • 您的 Redis 实例未在 localhost 运行。它在 docker 网络上有自己的 IP 地址。
  • 是的!太感谢了!呃,为什么每个教程都说localhost,即使使用docker?有没有办法指定 docker 稍后将分配或更改的 IP? (仅针对 CI / CD 问题和可预测性)

标签: .net docker redis network-programming


【解决方案1】:

感谢 Hans Kilian 的评论,我终于能够连接上!

尽管 Redis + Docker 教程看似无限使用 localhost:6379,但实际上 不是 Redis 在 Docker 网络中运行时的情况。要查找该 IP,例如使用名为 redis 的容器,请发出:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis

然后,您需要提供带有端口 6379 的结果 IP 地址作为连接字符串。

tl;博士;

不是:

localhost:6379

但是 Docker 为容器分配了 IP,例如:

172.18.0.7:6379

编辑:您也可以使用容器名称而不是 IP,即:

redis:6379

希望这对可能偶然发现此问题的任何人有所帮助。

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 2017-03-01
    • 1970-01-01
    • 2019-10-18
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2023-02-11
    相关资源
    最近更新 更多