// Package client provides Docker client initiatialisation functions. package client import ( "net/http" "os" "time" "github.com/docker/cli/cli/connhelper" "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 clientOpts = append(clientOpts, client.WithTimeout(3*time.Second)) if contextName != "default" { context, err := GetContext(contextName) if err != nil { return nil, err } ctxEndpoint, err := GetContextEndpoint(context) if err != nil { return nil, err } helper := newConnectionHelper(ctxEndpoint) httpClient := &http.Client{ // No tls, no proxy Transport: &http.Transport{ DialContext: helper.Dialer, }, } 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 } func newConnectionHelper(daemonURL string) *connhelper.ConnectionHelper { helper, err := connhelper.GetConnectionHelper(daemonURL) if err != nil { logrus.Fatal(err) } return helper }