From 43b493c60e8d91c8865e1affbb934909b0afd95f Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 10 May 2025 12:26:50 +0800 Subject: [PATCH] fix(agent): docker handler --- agent/pkg/handler/handler.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/agent/pkg/handler/handler.go b/agent/pkg/handler/handler.go index 795a265..3b57511 100644 --- a/agent/pkg/handler/handler.go +++ b/agent/pkg/handler/handler.go @@ -1,14 +1,18 @@ package handler import ( + "context" "fmt" + "net" "net/http" + "net/http/httputil" + "net/url" + "time" "github.com/yusing/go-proxy/agent/pkg/agent" "github.com/yusing/go-proxy/agent/pkg/env" "github.com/yusing/go-proxy/internal/metrics/systeminfo" "github.com/yusing/go-proxy/pkg" - socketproxy "github.com/yusing/go-proxy/socketproxy/pkg" ) type ServeMux struct{ *http.ServeMux } @@ -21,6 +25,23 @@ func (mux ServeMux) HandleFunc(endpoint string, handler http.HandlerFunc) { mux.ServeMux.HandleFunc(agent.APIEndpointBase+endpoint, handler) } +var dialer = &net.Dialer{KeepAlive: 1 * time.Second} + +func dialDockerSocket(ctx context.Context, _, _ string) (net.Conn, error) { + return dialer.DialContext(ctx, "unix", env.DockerSocket) +} + +func dockerSocketHandler() http.HandlerFunc { + rp := httputil.NewSingleHostReverseProxy(&url.URL{ + Scheme: "http", + Host: "api.moby.localhost", + }) + rp.Transport = &http.Transport{ + DialContext: dialDockerSocket, + } + return rp.ServeHTTP +} + func NewAgentHandler() http.Handler { mux := ServeMux{http.NewServeMux()} @@ -31,6 +52,6 @@ func NewAgentHandler() http.Handler { }) mux.HandleEndpoint("GET", agent.EndpointHealth, CheckHealth) mux.HandleEndpoint("GET", agent.EndpointSystemInfo, systeminfo.Poller.ServeHTTP) - mux.ServeMux.HandleFunc("/", socketproxy.DockerSocketHandler()) + mux.ServeMux.HandleFunc("/", dockerSocketHandler()) return mux }