diff --git a/cli/command/system/info.go b/cli/command/system/info.go index 1d675c75f0..b95db351ac 100644 --- a/cli/command/system/info.go +++ b/cli/command/system/info.go @@ -19,6 +19,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/registry" "github.com/docker/go-units" "github.com/spf13/cobra" ) @@ -41,6 +42,7 @@ type info struct { // object. *types.Info `json:",omitempty"` ServerErrors []string `json:",omitempty"` + UserName string `json:"-"` ClientInfo *clientInfo `json:",omitempty"` ClientErrors []string `json:",omitempty"` @@ -112,6 +114,8 @@ func runInfo(cmd *cobra.Command, dockerCli command.Cli, opts *infoOptions) error } if opts.format == "" { + info.UserName = dockerCli.ConfigFile().AuthConfigs[registry.IndexServer].Username + info.ClientInfo.APIVersion = dockerCli.CurrentVersion() return prettyPrintInfo(dockerCli, info) } return formatInfo(dockerCli, info, opts.format) @@ -173,7 +177,7 @@ func prettyPrintInfo(dockerCli command.Cli, info info) error { fmt.Fprintln(dockerCli.Out()) fmt.Fprintln(dockerCli.Out(), "Server:") if info.Info != nil { - for _, err := range prettyPrintServerInfo(dockerCli, *info.Info) { + for _, err := range prettyPrintServerInfo(dockerCli, &info) { info.ServerErrors = append(info.ServerErrors, err.Error()) } } @@ -211,7 +215,7 @@ func prettyPrintClientInfo(dockerCli command.Cli, info clientInfo) { } //nolint:gocyclo -func prettyPrintServerInfo(dockerCli command.Cli, info types.Info) []error { +func prettyPrintServerInfo(dockerCli command.Cli, info *info) []error { var errs []error fmt.Fprintln(dockerCli.Out(), " Containers:", info.Containers) @@ -246,7 +250,7 @@ func prettyPrintServerInfo(dockerCli command.Cli, info types.Info) []error { fmt.Fprintln(dockerCli.Out(), " Log:", strings.Join(info.Plugins.Log, " ")) fmt.Fprintln(dockerCli.Out(), " Swarm:", info.Swarm.LocalNodeState) - printSwarmInfo(dockerCli, info) + printSwarmInfo(dockerCli, *info.Info) if len(info.Runtimes) > 0 { fmt.Fprint(dockerCli.Out(), " Runtimes:") @@ -318,14 +322,7 @@ func prettyPrintServerInfo(dockerCli command.Cli, info types.Info) []error { fprintlnNonEmpty(dockerCli.Out(), " HTTP Proxy:", info.HTTPProxy) fprintlnNonEmpty(dockerCli.Out(), " HTTPS Proxy:", info.HTTPSProxy) fprintlnNonEmpty(dockerCli.Out(), " No Proxy:", info.NoProxy) - - if info.IndexServerAddress != "" { - u := dockerCli.ConfigFile().AuthConfigs[info.IndexServerAddress].Username - if len(u) > 0 { - fmt.Fprintln(dockerCli.Out(), " Username:", u) - } - } - + fprintlnNonEmpty(dockerCli.Out(), " Username:", info.UserName) if len(info.Labels) > 0 { fmt.Fprintln(dockerCli.Out(), " Labels:") for _, lbl := range info.Labels { @@ -444,16 +441,16 @@ func printSwarmInfo(dockerCli command.Cli, info types.Info) { } } -func printServerWarnings(dockerCli command.Cli, info types.Info) { - if versions.LessThan(dockerCli.Client().ClientVersion(), "1.42") { - printSecurityOptionsWarnings(dockerCli, info) +func printServerWarnings(dockerCli command.Cli, info *info) { + if versions.LessThan(info.ClientInfo.APIVersion, "1.42") { + printSecurityOptionsWarnings(dockerCli, *info.Info) } if len(info.Warnings) > 0 { fmt.Fprintln(dockerCli.Err(), strings.Join(info.Warnings, "\n")) return } // daemon didn't return warnings. Fallback to old behavior - printServerWarningsLegacy(dockerCli, info) + printServerWarningsLegacy(dockerCli, *info.Info) } // printSecurityOptionsWarnings prints warnings based on the security options