diff --git a/docker_client.go b/docker_client.go index 64fbed3927..ae4ff511dd 100644 --- a/docker_client.go +++ b/docker_client.go @@ -73,13 +73,17 @@ func (c *DockerClient) Info(ctx context.Context, options client.InfoOptions) (cl infoLabels += infoLabelsSb72.String() } + host, err := core.ExtractDockerHost(ctx) + if err != nil { + return dockerInfo, err + } log.Printf(infoMessage, packagePath, dockerInfo.Info.ServerVersion, c.ClientVersion(), dockerInfo.Info.OperatingSystem, dockerInfo.Info.MemTotal/1024/1024, infoLabels, internal.Version, - core.MustExtractDockerHost(ctx), + host, core.MustExtractDockerSocket(ctx), core.SessionID(), core.ProcessID(), diff --git a/internal/core/client.go b/internal/core/client.go index 6efa104509..795e6640c6 100644 --- a/internal/core/client.go +++ b/internal/core/client.go @@ -12,9 +12,12 @@ import ( // NewClient returns a new docker client extracting the docker host from the different alternatives func NewClient(ctx context.Context, ops ...client.Opt) (*client.Client, error) { - tcConfig := config.Read() + dockerHost, err := ExtractDockerHost(ctx) + if err != nil { + return nil, err + } - dockerHost := MustExtractDockerHost(ctx) + tcConfig := config.Read() opts := []client.Opt{client.FromEnv} if dockerHost != "" { diff --git a/internal/core/docker_host.go b/internal/core/docker_host.go index 265e69a75a..fbb2e2b059 100644 --- a/internal/core/docker_host.go +++ b/internal/core/docker_host.go @@ -31,8 +31,9 @@ var ( ) var ( - dockerHostCache string - dockerHostOnce sync.Once + dockerHostCache string + dockerHostErrCache error + dockerHostOnce sync.Once ) var ( @@ -85,16 +86,18 @@ var dockerHostCheck = func(ctx context.Context, host string) error { // 6. Rootless docker socket path. // 7. Else, because the Docker host is not set, it panics. func MustExtractDockerHost(ctx context.Context) string { - dockerHostOnce.Do(func() { - cache, err := extractDockerHost(ctx) - if err != nil { - panic(err) - } + host, err := ExtractDockerHost(ctx) + if err != nil { + panic(err) + } + return host +} - dockerHostCache = cache +func ExtractDockerHost(ctx context.Context) (string, error) { + dockerHostOnce.Do(func() { + dockerHostCache, dockerHostErrCache = extractDockerHost(ctx) }) - - return dockerHostCache + return dockerHostCache, dockerHostErrCache } // MustExtractDockerSocket Extracts the docker socket from the different alternatives, removing the socket schema and diff --git a/provider.go b/provider.go index d2347b7f3b..210f451fc6 100644 --- a/provider.go +++ b/provider.go @@ -141,15 +141,18 @@ func NewDockerProvider(provOpts ...DockerProviderOption) (*DockerProvider, error } ctx := context.Background() + host, err := core.ExtractDockerHost(ctx) + if err != nil { + return nil, err + } c, err := NewDockerClientWithOpts(ctx) if err != nil { return nil, err } - return &DockerProvider{ DockerProviderOptions: o, - host: core.MustExtractDockerHost(ctx), client: c, + host: host, config: config.Read(), }, nil }