去net/http unix域套接字连接

cod*_*nja 4 sockets http go

我无法连接到我的服务器,该服务器侦听Unix域套接字.

Go的net/http包似乎无法使用套接字路径连接到目标.

有没有一个很好的选择,而无需使用net?创建自己的HTTP协议实现?


我发现很多类似的解决方案的这些,但它们不适合

我试过了:

_, err := http.Get("unix:///var/run/docker.sock")(unix改为path/ socket.它总是抱怨一个不受支持的协议

One*_*One 18

你必须实现自己的RoundTripper来支持unix套接字.

最简单的方法可能是使用http而不是unix套接字与docker进行通信.

编辑init脚本并添加-H tcp://127.0.0.1:xxxx,例如:

/usr/bin/docker -H tcp://127.0.0.1:9020
Run Code Online (Sandbox Code Playgroud)

您也可以伪造拨号功能并将其传递给传输:

func fakeDial(proto, addr string) (conn net.Conn, err error) {
    return net.Dial("unix", sock)
}

tr := &http.Transport{
    Dial: fakeDial,
}
client := &http.Client{Transport: tr}
resp, err := client.Get("http://d/test")
Run Code Online (Sandbox Code Playgroud)

playground

只有一个小小的警告,你的所有client.Get/ .Post调用必须是一个有效的URL(http://xxxx.xxx/path不是unix://...),域名无关紧要,因为它不会用于连接.