Docker容器无法连接Windows WSL中运行的Golang Echo Server
解决WSL中Go Echo服务无法被Docker容器访问的问题
问题原因
host.docker.internal在Windows Docker Desktop环境中默认指向Windows主机,而你的Go Echo服务运行在WSL虚拟机内部,并非直接在Windows主机上,因此容器通过host.docker.internal:5050无法定位到WSL中的服务。而你能访问Flask容器是因为该容器通过5000:5000将端口映射到了Windows主机,host.docker.internal可以直接访问Windows主机的端口。
解决方案
方案1:直接使用WSL虚拟机的IP访问
- 在WSL终端中执行以下命令获取WSL的IP地址:
ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' - 在Docker容器中替换为实际的WSL IP进行访问:
curl http://<WSL_IP>:5050/
方案2:将WSL端口转发到Windows主机
通过端口转发让Windows主机的5050端口指向WSL的5050端口,这样host.docker.internal就能直接访问:
- 先获取WSL的IP(同方案1)
- 打开Windows管理员命令提示符,执行端口转发命令:
netsh interface portproxy add v4tov4 listenport=5050 listenaddress=0.0.0.0 connectport=5050 connectaddress=<WSL_IP> - 之后在Docker容器中即可正常使用:
(如果WSL重启后IP变化,需要重新执行上述转发命令)curl http://host.docker.internal:5050/
方案3:持久化配置host.docker.internal指向WSL IP
- 获取WSL的IP(同方案1)
- 打开Windows系统的
C:\Windows\System32\drivers\etc\hosts文件(需管理员权限) - 添加一行配置:
该方法的缺点是WSL重启后IP可能变更,需要手动更新hosts文件,也可以编写脚本自动更新。<WSL_IP> host.docker.internal
内容的提问来源于stack exchange,提问作者ar-siddiqui
相关产品推荐
相关产品推荐

