docker/cli · warning

errors pretty printing info

Error message

errors pretty printing info

What it means

Returned by prettyPrintInfo (system info.go:211-213) as an aggregate sentinel AFTER it has already printed each individual client/server error to stderr. It is raised whenever info.ClientErrors or info.ServerErrors is non-empty, meaning one or more subsystems failed to report their info. The real diagnostic detail is in the per-line 'ERROR:' messages printed just before this aggregate is returned.

Solutions

  1. Read the individual 'ERROR:' lines printed above this message - they name the actual failing component.
  2. Fix or remove the offending CLI plugin (docker plugin ls / docker plugin rm).
  3. For server-side errors, inspect the dockerd logs (journalctl -u docker) for the underlying cause.
  4. If Swarm-related, verify node status with 'docker node ls' and restore quorum.
  5. Re-run 'docker info' after the fix to confirm a clean (zero-error) result.
Defensive patterns

Strategy: try-catch

Try / catch

// When scripting 'docker info', expect a non-zero exit when any subsystem errored.
out, err := exec.Command("docker", "info", "--format", "{{json .}}").Output()
if err != nil {
    // The aggregate 'errors pretty printing info' is expected if subsystems failed;
    // parse the JSON (if produced) for ServerErrors/ClientErrors rather than failing hard.
    if len(out) > 0 {
        var info map[string]any
        _ = json.Unmarshal(out, &info)
        // inspect info["ServerErrors"] / info["ClientErrors"]
    }
    // treat as soft warning, not fatal, unless critical fields are missing
}

Prevention

When it happens

Trigger: Running 'docker info' when the daemon returned partial results: e.g. a plugin failed to load, the builder/registry responded with an error, Swarm could not be reached, or a CLI plugin errored. Each entry in info.ServerErrors/info.ClientErrors is printed, then the function returns this summary error so the CLI exits non-zero.

Common situations: Broken or half-installed CLI plugins (info.go:225-231 marks invalid plugins). Daemon with disabled or misconfigured subsystems (logging, builder, registry mirrors). Swarm manager node that lost quorum. Client/plugin version skew where a plugin crashes on load.

Related errors


AI-assisted analysis of docker/cli@4f84911bfe (2026-08-07). Data as JSON: /api/errors/1b04e6a9a1cc9fe7. Report an issue: GitHub.

Appendix: source

Thrown at cli/command/system/info.go:212

	}
	if info.ClientInfo != nil {
		prettyPrintClientInfo(streams, *info.ClientInfo)
	}
	for _, err := range info.ClientErrors {
		fprintln(streams.Err(), "ERROR:", err)
	}

	fprintln(streams.Out())
	fprintln(streams.Out(), "Server:")
	if info.Info != nil {
		prettyPrintServerInfo(streams, &info)
	}
	for _, err := range info.ServerErrors {
		fprintln(streams.Err(), "ERROR:", err)
	}

	if len(info.ServerErrors) > 0 || len(info.ClientErrors) > 0 {
		return errors.New("errors pretty printing info")
	}
	return nil
}

func prettyPrintClientInfo(streams command.Streams, info clientInfo) {
	fprintlnNonEmpty(streams.Out(), " Version:   ", info.Version)
	fprintln(streams.Out(), " Context:   ", info.Context)
	fprintln(streams.Out(), " Debug Mode:", info.Debug)

	if len(info.Plugins) > 0 {
		fprintln(streams.Out(), " Plugins:")
		for _, p := range info.Plugins {
			if p.Err == nil {
				fprintf(streams.Out(), "  %s: %s (%s)\n", p.Name, p.ShortDescription, p.Vendor)
				fprintlnNonEmpty(streams.Out(), "    Version: ", p.Version)
				fprintlnNonEmpty(streams.Out(), "    Path:    ", p.Path)
			} else {
				info.Warnings = append(info.Warnings, fmt.Sprintf("WARNING: Plugin %q is not valid: %s", p.Path, p.Err))

View on GitHub (pinned to 4f84911bfe)