目前 wsl2 中使用了一下配置镜像了 Win11 网络,win11 是我的主机
[experimental]
hostAddressLoopback=true
[wsl2]
networkingMode=mirrored
memory=12GB
localhostForwarding=true
[network]
generateResolvConf = false
在 go 的容器中
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
// 10.60.33.53 是我 Win11 上的 ipv4 地址
err := http.ListenAndServe("10.60.33.53:8080", nil)
if err != nil {
fmt.Println("Error starting server:", err)
}
}
通过运行会报错 listen tcp 10.60.33.53:8080: bind: cannot assign requested address
当然把 10.60.33.53 换成 0.0.0.0 肯定是没问题的,但是下面要说才是问题
我使用的 kratos 框架,然后启动的时候会去 consul 注册(这个是局域网其他机器上的),
尴尬的事情来了,
如果使用 ip 指定 0.0.0.0 那么最后注册到 consul 中的 ip 是容器内( 192.168.65.6 )的 ip 就导致健康检测不了,
但是如果我用 10.60.33.53 启动就会导致上面那个小例子的报错,
所以想问寻求大佬们有没有什么比较好一点解决方案,
目前的解决方案就是通过 0.0.0.0 启动,
然后在代码里修改 consul 注册和检测的 ip 为 10.60.33.53
但是这种侵入式的方案不行
本人是 go 小白真心求解答,谢谢
|