window 开启docker desktop远程访问 Published on Jun 8, 2026 in 随笔 with 0 comment docker desktop 配置允许2375访问 默认Docker 监听在 IPv6 的 ::1 上。用管理员 CMD 执行: 然后终端管理员允许: ``` netsh interface portproxy add v4tov6 listenaddress=0.0.0.0 listenport=23750 connectaddress=::1 connectport=2375 ``` # Docker Desktop 远程连接问题排查(localhost:2375 能访问,127.0.0.1 与局域网 IP 不行) 最近在使用另一台机器连接 Windows 上的 Docker Desktop Remote API 时,出现了如下问题: ```bash curl http://192.168.2.149:2375/version curl: (52) Empty reply from server ``` 同时: * `http://localhost:2375/version` 可以正常访问 * `http://127.0.0.1:2375/version` 无法访问 * 局域网 IP 访问失败 本文记录完整原因与解决方案。 --- # 一、问题现象 在 Docker Desktop 所在机器本机测试: ```bash curl http://localhost:2375/version ``` 正常返回: ```json { "Version": "28.x.x", ... } ``` 但是: ```bash curl http://127.0.0.1:2375/version ``` 失败。 另一台机器访问: ```bash curl http://192.168.2.149:2375/version ``` 返回: ```txt curl: (52) Empty reply from server ``` --- # 二、为什么 localhost 能访问,而 127.0.0.1 不行? 这是因为 Docker Desktop 在某些 Windows 环境下: * 只监听 IPv6 localhost * 没有监听 IPv4 127.0.0.1 即 Docker 实际监听的是: ```txt ::1:2375 ``` 而不是: ```txt 127.0.0.1:2375 ``` --- # 三、验证 Docker 实际监听地址 在 Docker Desktop 所在机器执行: ```cmd netstat -ano | findstr 2375 ``` 如果看到: ```txt TCP [::1]:2375 ``` 说明 Docker 只监听 IPv6 localhost。 如果是: ```txt TCP [::]:2375 ``` 说明监听所有 IPv6 地址。 但如果没有: ```txt 127.0.0.1:2375 ``` 那么 IPv4 无法直接访问。 --- # 四、为什么 localhost 可以? 因为 Windows 下: ```txt localhost ``` 通常会优先解析到: ```txt ::1 ``` 即: ```txt IPv6 localhost ``` 所以: ```bash curl http://localhost:2375/version ``` 实际上访问的是: ```txt http://[::1]:2375 ``` 因此可以正常通信。 --- # 五、为什么局域网 IP 无法访问? 因为: ```txt 192.168.x.x ``` 属于 IPv4。 但 Docker Desktop 只监听 IPv6 localhost: ```txt ::1 ``` 因此局域网设备无法直接访问 Docker Remote API。 --- # 六、解决方案:使用 netsh 做 IPv4 → IPv6 转发 在 Docker Desktop 所在机器,以管理员身份打开 CMD: 执行: ```cmd netsh interface portproxy add v4tov6 listenaddress=0.0.0.0 listenport=23750 connectaddress=::1 connectport=2375 ``` 含义: ```txt 局域网 IPv4 23750 ↓ 转发到 ↓ 本机 IPv6 ::1:2375 ``` 即: ```txt 0.0.0.0:23750 → ::1:2375 ``` --- # 七、开放 Windows 防火墙 执行: ```cmd netsh advfirewall firewall add rule name="Docker Remote API 23750" dir=in action=allow protocol=TCP localport=23750 ``` --- # 八、测试远程访问 现在另一台机器执行: ```bash curl http://192.168.2.149:23750/version ``` 正常应返回 Docker 版本 JSON。 --- # 九、Python Docker SDK 配置 远程机器: ```python import docker client = docker.DockerClient( base_url="tcp://192.168.2.149:23750", timeout=120 ) print(client.version()) ``` --- # 十、如何删除转发 如果后续不需要: ```cmd netsh interface portproxy delete v4tov6 listenaddress=0.0.0.0 listenport=23750 ``` --- # 十一、安全风险说明 2375 属于: ```txt 无认证 Docker Remote API ``` 任何能访问该端口的人: * 可以创建容器 * 删除容器 * 挂载宿主机目录 * 获取系统权限 因此: * 不要暴露公网 * 仅限可信局域网 * 建议后续改为 SSH 隧道或 TLS 认证 --- # 十二、更推荐的安全方案(SSH 隧道) 如果只是一台机器临时连接,推荐: ```bash ssh -L 2375:localhost:2375 Administrator@192.168.2.149 ``` 然后本机连接: ```txt tcp://localhost:2375 ``` 这样无需暴露 Docker Remote API 到局域网。 --- # 十三、总结 问题根因: ```txt Docker Desktop 仅监听 IPv6 localhost (::1) ``` 导致: * localhost 能访问 * 127.0.0.1 不行 * 局域网 IP 不行 解决方案: ```txt 使用 netsh portproxy 将 IPv4 转发到 IPv6 localhost ``` 核心命令: ```cmd netsh interface portproxy add v4tov6 listenaddress=0.0.0.0 listenport=23750 connectaddress=::1 connectport=2375 ``` 然后局域网机器连接: ```txt 192.168.2.149:23750 ``` 本文由 admin 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。