diff --git a/components/engine/cli/command/system/info.go b/components/engine/cli/command/system/info.go index ec1cf47de2..d9fafd1aa1 100644 --- a/components/engine/cli/command/system/info.go +++ b/components/engine/cli/command/system/info.go @@ -103,7 +103,7 @@ func prettyPrintInfo(dockerCli *command.DockerCli, info types.Info) error { fmt.Fprintf(dockerCli.Out(), " Error: %v\n", info.Swarm.Error) } fmt.Fprintf(dockerCli.Out(), " Is Manager: %v\n", info.Swarm.ControlAvailable) - if info.Swarm.ControlAvailable { + if info.Swarm.ControlAvailable && info.Swarm.Error == "" && info.Swarm.LocalNodeState != swarm.LocalNodeStateError { fmt.Fprintf(dockerCli.Out(), " ClusterID: %s\n", info.Swarm.Cluster.ID) fmt.Fprintf(dockerCli.Out(), " Managers: %d\n", info.Swarm.Managers) fmt.Fprintf(dockerCli.Out(), " Nodes: %d\n", info.Swarm.Nodes) diff --git a/components/engine/daemon/cluster/cluster.go b/components/engine/daemon/cluster/cluster.go index f6a17d6b66..72997f6525 100644 --- a/components/engine/daemon/cluster/cluster.go +++ b/components/engine/daemon/cluster/cluster.go @@ -750,7 +750,9 @@ func (c *Cluster) Info() types.Info { // Strip JoinTokens info.Cluster = swarm.ClusterInfo - if r, err := state.controlClient.ListNodes(ctx, &swarmapi.ListNodesRequest{}); err == nil { + if r, err := state.controlClient.ListNodes(ctx, &swarmapi.ListNodesRequest{}); err != nil { + info.Error = err.Error() + } else { info.Nodes = len(r.Nodes) for _, n := range r.Nodes { if n.ManagerStatus != nil {