@ -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 != "" {