package docker import ( "context" "time" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" E "github.com/yusing/go-proxy/internal/error" ) type ClientInfo struct { Client Client Containers []types.Container } var listOptions = container.ListOptions{ // Filters: filters.NewArgs( // filters.Arg("health", "healthy"), // filters.Arg("health", "none"), // filters.Arg("health", "starting"), // ), All: true, } func GetClientInfo(clientHost string, getContainer bool) (*ClientInfo, E.NestedError) { dockerClient, err := ConnectClient(clientHost) if err.HasError() { return nil, E.FailWith("connect to docker", err) } defer dockerClient.Close() ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() var containers []types.Container if getContainer { containers, err = E.Check(dockerClient.ContainerList(ctx, listOptions)) if err.HasError() { return nil, E.FailWith("list containers", err) } } return &ClientInfo{ Client: dockerClient, Containers: containers, }, nil } func IsErrConnectionFailed(err error) bool { return client.IsErrConnectionFailed(err) }