Use new APIClient interface
@@ -22,7 +22,6 @@ import (
"github.com/docker/docker/api/types"
registrytypes "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/client"
- "github.com/docker/go-connections/sockets"
"github.com/docker/go-connections/tlsconfig"
"github.com/pkg/errors"
"github.com/spf13/cobra"
@@ -260,12 +259,12 @@ func NewAPIClientFromFlags(opts *cliflags.CommonOptions, configFile *configfile.
verStr = tmpStr
}
- httpClient, err := newHTTPClient(host, opts.TLSOptions)
- if err != nil {
- return &client.Client{}, err
- }
-
- return client.NewClient(host, verStr, httpClient, customHeaders)
+ return client.NewClientWithOpts(
+ withHTTPClient(opts.TLSOptions),
+ client.WithHTTPHeaders(customHeaders),
+ client.WithVersion(verStr),
+ client.WithHost(host),
+ )
}
func getServerHost(hosts []string, tlsOptions *tlsconfig.Options) (string, error) {
@@ -282,35 +281,32 @@ func getServerHost(hosts []string, tlsOptions *tlsconfig.Options) (string, error
return dopts.ParseHost(tlsOptions != nil, host)
}
-func newHTTPClient(host string, tlsOptions *tlsconfig.Options) (*http.Client, error) {
- if tlsOptions == nil {
- // let the api client configure the default transport.
- return nil, nil
+func withHTTPClient(tlsOpts *tlsconfig.Options) func(*client.Client) error {
+ return func(c *client.Client) error {
+ if tlsOpts == nil {
+ // Use the default HTTPClient
+ return nil
}
- opts := *tlsOptions
+
+ opts := *tlsOpts
opts.ExclusiveRootPools = true
- config, err := tlsconfig.Client(opts)
+ tlsConfig, err := tlsconfig.Client(opts)
if err != nil {
- return nil, err
+ return err
}
- tr := &http.Transport{
- TLSClientConfig: config,
+
+ httpClient := &http.Client{
+ Transport: &http.Transport{
+ TLSClientConfig: tlsConfig,
DialContext: (&net.Dialer{
KeepAlive: 30 * time.Second,
Timeout: 30 * time.Second,
}).DialContext,
+ },
+ CheckRedirect: client.CheckRedirect,
}
- hostURL, err := client.ParseHostURL(host)
- if err != nil {
- return nil, err
+ return client.WithHTTPClient(httpClient)(c)
}
-
- sockets.ConfigureTransport(tr, hostURL.Scheme, hostURL.Host)
-
- return &http.Client{
- Transport: tr,
- CheckRedirect: client.CheckRedirect,
- }, nil
}
// UserAgent returns the user agent string used for making API requests
