// Package client provides Docker client initiatialisation functions. package client import ( "net/http" "os" "time" contextPkg "coopcloud.tech/abra/pkg/context" commandconnPkg "coopcloud.tech/abra/pkg/upstream/commandconn" "github.com/docker/docker/client" "github.com/sirupsen/logrus" ) // New initiates a new Docker client. func New(contextName string) (*client.Client, error) { var clientOpts []client.Opt if contextName != "default" { context, err := GetContext(contextName) if err != nil { return nil, err } ctxEndpoint, err := contextPkg.GetContextEndpoint(context) if err != nil { return nil, err } helper := commandconnPkg.NewConnectionHelper(ctxEndpoint) httpClient := &http.Client{ // No tls, no proxy Transport: &http.Transport{ DialContext: helper.Dialer, IdleConnTimeout: 30 * time.Second, }, } clientOpts = append(clientOpts, client.WithHTTPClient(httpClient), client.WithHost(helper.Host), client.WithDialContext(helper.Dialer), ) } version := os.Getenv("DOCKER_API_VERSION") if version != "" { clientOpts = append(clientOpts, client.WithVersion(version)) } else { clientOpts = append(clientOpts, client.WithAPIVersionNegotiation()) } cl, err := client.NewClientWithOpts(clientOpts...) if err != nil { return nil, err } logrus.Debugf("created client for '%s'", contextName) return cl, nil }