From 1078731f2d4646afa11577d515deb9e82f34730e Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 8 Mar 2025 07:10:53 +0800 Subject: [PATCH] docker: refactor container related code --- internal/docker/container.go | 11 ++++++----- internal/docker/list_containers.go | 10 ++-------- internal/route/provider/docker.go | 8 +++++++- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/internal/docker/container.go b/internal/docker/container.go index f2bcb7b..728a918 100644 --- a/internal/docker/container.go +++ b/internal/docker/container.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/docker/docker/api/types/container" + "github.com/docker/go-connections/nat" "github.com/yusing/go-proxy/agent/pkg/agent" config "github.com/yusing/go-proxy/internal/config/types" "github.com/yusing/go-proxy/internal/logging" @@ -105,7 +106,7 @@ func FromDocker(c *container.Summary, dockerHost string) (res *Container) { func FromInspectResponse(json container.InspectResponse, dockerHost string) *Container { ports := make([]container.Port, 0) for k, bindings := range json.NetworkSettings.Ports { - privPortStr, proto := k.Port(), k.Proto() + proto, privPortStr := nat.SplitProtoPort(string(k)) privPort, _ := strconv.ParseUint(privPortStr, 10, 16) ports = append(ports, container.Port{ PrivatePort: uint16(privPort), @@ -137,6 +138,10 @@ func FromInspectResponse(json container.InspectResponse, dockerHost string) *Con return cont } +func (c *Container) IsBlacklisted() bool { + return c.Image.IsBlacklisted() || c.isDatabase() +} + var databaseMPs = map[string]struct{}{ "/var/lib/postgresql/data": {}, "/var/lib/mysql": {}, @@ -163,10 +168,6 @@ func (c *Container) isDatabase() bool { return false } -func (c *Container) IsBlacklisted() bool { - return c.Image.IsBlacklisted() || c.isDatabase() -} - func (c *Container) setPublicHostname() { if !c.Running { return diff --git a/internal/docker/list_containers.go b/internal/docker/list_containers.go index 517b59d..0fe5973 100644 --- a/internal/docker/list_containers.go +++ b/internal/docker/list_containers.go @@ -21,17 +21,11 @@ var listOptions = container.ListOptions{ All: true, } -func ListContainers(clientHost string) ([]container.Summary, error) { - dockerClient, err := NewClient(clientHost) - if err != nil { - return nil, err - } - defer dockerClient.Close() - +func (c *SharedClient) ListContainers() ([]container.Summary, error) { ctx, cancel := context.WithTimeoutCause(context.Background(), 3*time.Second, errors.New("list containers timeout")) defer cancel() - containers, err := dockerClient.ContainerList(ctx, listOptions) + containers, err := c.ContainerList(ctx, listOptions) if err != nil { return nil, err } diff --git a/internal/route/provider/docker.go b/internal/route/provider/docker.go index e08cfc8..957a9fe 100755 --- a/internal/route/provider/docker.go +++ b/internal/route/provider/docker.go @@ -61,7 +61,13 @@ func (p *DockerProvider) NewWatcher() watcher.Watcher { } func (p *DockerProvider) loadRoutesImpl() (route.Routes, gperr.Error) { - containers, err := docker.ListContainers(p.dockerHost) + dockerClient, err := docker.NewClient(p.dockerHost) + if err != nil { + return nil, gperr.Wrap(err) + } + defer dockerClient.Close() + + containers, err := dockerClient.ListContainers() if err != nil { return nil, gperr.Wrap(err) }