# 同时提供 unix-socket 和 tcp 接口
# code
package main
import (
"net"
"net/http"
"os"
)
func main() {
http.HandleFunc("/containers", handleContainers)
// 启动 Unix 套接字监听器
os.Remove("/var/run/jocker.sock")
unixListener, err := net.Listen("unix", "/var/run/jocker.sock")
if err != nil {
panic(err)
}
defer unixListener.Close()
// 启动 TCP 监听器
tcpListener, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer tcpListener.Close()
// 启动 HTTP 服务器并处理请求
go http.Serve(tcpListener, nil)
go http.Serve(unixListener, nil)
select{}
}
func handleContainers(w http.ResponseWriter, r *http.Request) {
// 处理 /containers 请求的逻辑
w.Write([]byte("containers"))
}
# test
curl localhost:8080/containers
# output
containers
curl --unix-socket ./jocker.sock http://localhost/containers
# output
containers
docker run -it --rm -v /var/run/jocker.sock:/var/run/jocker.sock centos:7 bash
curl --unix-socket ./jocker.sock http://localhost/containers
# output
containers
← implement-http gin →