You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2 Docker Redis无法通过.NET的localhost连接,换127.0.0.1正常

问题:.NET中用localhost连接WSL2 Docker里的Redis超时,换127.0.0.1却正常?

问题场景

  • 在WSL2实例的Docker容器中运行redis-stack,端口已映射到Windows主机
  • Windows主机可通过http://localhost:8001访问Redis Insights,Git Bash中用localhost连接Redis执行命令也正常,WSL2内部也能正常访问Redis
  • 使用StackExchange.Redis NuGet包编写的xUnit测试,用localhost连接时出现超时错误,日志显示Redis版本为v3.0.0(实际通过INFO命令返回的版本是7.4.0)
  • 将连接地址替换为127.0.0.1后,测试完全正常

原因分析

  • localhost解析优先级差异:Windows系统中,.NET程序默认优先将localhost解析为IPv6地址::1,但你的Redis容器可能只监听了IPv4的127.0.0.1端口。当程序尝试用IPv6连接时,容器内的Redis没有响应,最终导致超时。而直接指定127.0.0.1会强制使用IPv4协议,自然能正常连接。
  • 错误版本信息的来源:日志里的v3.0.0版本并非容器中Redis的真实版本,而是StackExchange.Redis在连接失败时返回的默认占位值,或者是本地残留的旧Redis服务缓存信息,和实际容器内的Redis无关。
  • 不同工具的网络处理逻辑不同:Git Bash、浏览器等工具在解析localhost时,会自动在IPv6连接失败时 fallback 到IPv4;但.NET的网络堆栈遵循系统默认的地址解析优先级,不会自动切换,因此出现了差异。

内容的提问来源于stack exchange,提问作者mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:55:59