|
|
|
@ -35,6 +35,8 @@ import (
|
|
|
|
|
notaryclient "github.com/theupdateframework/notary/client"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const defaultInitTimeout = 2 * time.Second
|
|
|
|
|
|
|
|
|
|
// Streams is an interface which exposes the standard input and output streams
|
|
|
|
|
type Streams interface {
|
|
|
|
|
In() *streams.In
|
|
|
|
@ -77,6 +79,7 @@ type DockerCli struct {
|
|
|
|
|
currentContext string
|
|
|
|
|
dockerEndpoint docker.Endpoint
|
|
|
|
|
contextStoreConfig store.Config
|
|
|
|
|
initTimeout time.Duration
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// DefaultVersion returns api.defaultVersion.
|
|
|
|
@ -216,7 +219,7 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions, ops ...Initialize
|
|
|
|
|
cli.contextStore = &ContextStoreWithDefault{
|
|
|
|
|
Store: baseContextStore,
|
|
|
|
|
Resolver: func() (*DefaultContext, error) {
|
|
|
|
|
return ResolveDefaultContext(opts.Common, cli.ConfigFile(), cli.contextStoreConfig, cli.Err())
|
|
|
|
|
return ResolveDefaultContext(opts.Common, cli.contextStoreConfig)
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
cli.currentContext, err = resolveContextName(opts.Common, cli.configFile, cli.contextStore)
|
|
|
|
@ -244,7 +247,7 @@ func NewAPIClientFromFlags(opts *cliflags.CommonOptions, configFile *configfile.
|
|
|
|
|
contextStore := &ContextStoreWithDefault{
|
|
|
|
|
Store: store.New(config.ContextStoreDir(), storeConfig),
|
|
|
|
|
Resolver: func() (*DefaultContext, error) {
|
|
|
|
|
return ResolveDefaultContext(opts, configFile, storeConfig, io.Discard)
|
|
|
|
|
return ResolveDefaultContext(opts, storeConfig)
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
contextName, err := resolveContextName(opts, configFile, contextStore)
|
|
|
|
@ -313,13 +316,20 @@ func resolveDefaultDockerEndpoint(opts *cliflags.CommonOptions) (docker.Endpoint
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (cli *DockerCli) getInitTimeout() time.Duration {
|
|
|
|
|
if cli.initTimeout != 0 {
|
|
|
|
|
return cli.initTimeout
|
|
|
|
|
}
|
|
|
|
|
return defaultInitTimeout
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (cli *DockerCli) initializeFromClient() {
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
if strings.HasPrefix(cli.DockerEndpoint().Host, "tcp://") {
|
|
|
|
|
if !strings.HasPrefix(cli.DockerEndpoint().Host, "ssh://") {
|
|
|
|
|
// @FIXME context.WithTimeout doesn't work with connhelper / ssh connections
|
|
|
|
|
// time="2020-04-10T10:16:26Z" level=warning msg="commandConn.CloseWrite: commandconn: failed to wait: signal: killed"
|
|
|
|
|
var cancel func()
|
|
|
|
|
ctx, cancel = context.WithTimeout(ctx, 2*time.Second)
|
|
|
|
|
ctx, cancel = context.WithTimeout(ctx, cli.getInitTimeout())
|
|
|
|
|
defer cancel()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -456,10 +466,10 @@ func resolveContextName(opts *cliflags.CommonOptions, config *configfile.ConfigF
|
|
|
|
|
if len(opts.Hosts) > 0 {
|
|
|
|
|
return DefaultContextName, nil
|
|
|
|
|
}
|
|
|
|
|
if _, present := os.LookupEnv(client.EnvOverrideHost); present {
|
|
|
|
|
if os.Getenv(client.EnvOverrideHost) != "" {
|
|
|
|
|
return DefaultContextName, nil
|
|
|
|
|
}
|
|
|
|
|
if ctxName, ok := os.LookupEnv("DOCKER_CONTEXT"); ok {
|
|
|
|
|
if ctxName := os.Getenv("DOCKER_CONTEXT"); ctxName != "" {
|
|
|
|
|
return ctxName, nil
|
|
|
|
|
}
|
|
|
|
|
if config != nil && config.CurrentContext != "" {
|
|
|
|
|