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

如何让其他设备客户端访问WSL中Docker部署的nats-server?

解决WSL中Docker化NATS Server无法被局域网设备访问的问题

问题原因

WSL2 环境中,Docker 默认会将端口绑定到 WSL 实例的私有 IP(通常是 172.x.x.x 段),而非主机的所有网卡接口。这就导致只有主机能通过 WSL 互通网络访问容器服务,但局域网内其他设备无法直接连接。而直接运行 nats-server.exe 时,程序默认绑定主机的 0.0.0.0,所以外部设备能正常访问。

解决方案

1. 修改 Docker 启动命令,强制端口绑定到所有网卡

将原启动命令中的端口映射改为绑定 0.0.0.0,这样容器端口会开放到 WSL 的所有可用网卡,配合 WSL 与主机的网络转发,外部设备就能通过主机 IP 访问:

docker run -d -p 0.0.0.0:4222:4222 -p 0.0.0.0:6222:6222 -p 0.0.0.0:8222:8222 --name my-nats-container nats:latest
  • 0.0.0.0 表示绑定当前实例的所有网卡接口,确保局域网设备的请求能穿透到容器。

2. 放行 Windows 防火墙入站规则

主机的 Windows 防火墙可能拦截了外部设备对这些端口的访问,需要手动添加入站规则:

  • 打开「Windows Defender 防火墙 → 高级设置」
  • 点击「入站规则」→「新建规则」
  • 选择「端口」→ 勾选「TCP」,填入端口 4222,6222,8222
  • 选择「允许连接」,应用到「域、专用、公网」(根据你的网络环境调整)
  • 完成规则创建并命名(比如 NATS Server Ports)

3. (可选)检查 WSL 内部防火墙

如果 WSL 中启用了 ufw 等防火墙工具,需要同步放行对应端口:

sudo ufw allow 4222/tcp
sudo ufw allow 6222/tcp
sudo ufw allow 8222/tcp
sudo ufw reload

4. (备选)使用 Docker Host 网络模式

直接让容器使用 WSL 的网络栈,无需端口映射,启动命令如下:

docker run -d --network host --name my-nats-container nats:latest
  • 注意:此模式下容器会直接占用 WSL 的对应端口,需确保端口未被其他程序占用;客户端仍使用主机局域网 IP 访问。

客户端连接配置

客户端需使用主机的局域网 IPv4 地址(而非 WSL 的私有 IP),配合对应端口连接:

  • 查看主机局域网 IP:在 Windows 命令行执行 ipconfig,找到当前网络适配器的 IPv4 地址(比如 192.168.1.105)
  • 连接示例:nats://192.168.1.105:4222 或 http://192.168.1.105:8222

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:35