diff --git a/compose.go b/compose.go index 5d2828bb8a..7dc52f570d 100644 --- a/compose.go +++ b/compose.go @@ -6,6 +6,7 @@ import ( "path/filepath" "runtime" "strings" + "sync" "github.com/compose-spec/compose-go/types" "github.com/docker/cli/cli/command" @@ -22,6 +23,7 @@ const ( envComposeFile = "COMPOSE_FILE" ) +var composeLogOnce sync.Once var ErrNoStackConfigured = errors.New("no stack files configured") type composeStackOptions struct { @@ -129,6 +131,11 @@ func NewDockerComposeWith(opts ...ComposeStackOption) (*dockerCompose, error) { containers: make(map[string]*DockerContainer), } + // log docker server info only once + composeLogOnce.Do(func() { + logDockerServerInfo(context.Background(), dockerCli.Client(), Logger) + }) + return composeAPI, nil } diff --git a/docker.go b/docker.go index 3759c9d748..80c4e63c63 100644 --- a/docker.go +++ b/docker.go @@ -804,12 +804,14 @@ func NewDockerProvider(provOpts ...DockerProviderOption) (*DockerProvider, error } // log docker server info only once - logOnce.Do(p.logDockerServerInfo) + logOnce.Do(func() { + logDockerServerInfo(context.Background(), p.client, p.Logger) + }) return p, nil } -func (p *DockerProvider) logDockerServerInfo() { +func logDockerServerInfo(ctx context.Context, client client.APIClient, logger Logging) { infoMessage := `%v - Connected to docker: Server Version: %v API Version: %v @@ -817,13 +819,14 @@ func (p *DockerProvider) logDockerServerInfo() { Total Memory: %v MB ` - info, err := p.client.Info(context.Background()) + info, err := client.Info(ctx) if err != nil { - p.Logger.Printf("failed getting information about docker server: %s", err) + logger.Printf("failed getting information about docker server: %s", err) + return } - p.Logger.Printf(infoMessage, packagePath, - info.ServerVersion, p.client.ClientVersion(), + logger.Printf(infoMessage, packagePath, + info.ServerVersion, client.ClientVersion(), info.OperatingSystem, info.MemTotal/1024/1024) }