DockerCLI/cli/command
Sebastiaan van Stijn 90058df305
cli/command/container: remove reportError, and put StatusError to use
The `reportError` utility was present because cli.StatusError would print
the error decorated with `Status: <error-message>, Code: <exit-code>`.
That was not desirable in many cases as it would mess-up the output. To
prevent this, the CLI had code to check for an empty `Status` (error message)
in which case the error would be "ignored" (and only used for the exit-status),
and the `reportError` utility would be used to manually print a custom error
message before returning the error.

Now that bca2090061 fixed the output format
of `cli.StatusError`, and 3dd6fc365d and
350a0b68a9 no longer discard these error,
we can get rid of this utility, and just set the error-message for
the status-error.

This patch:

- Introduces a `withHelp` which takes care of decorating errors with
  a "Run --help" hint for the user.
- Introduces a `toStatusError` utility that detects certain errors in
  the container to assign a corresponding exit-code (these error-codes
  can be used to distinguish "client" errors from "container" errors).
- Removes the `reportError` utility, and removes code that manually
  printed errors before returning.

Behavior is mostly unmodified, with the exception of some slight reformatting
of the errors:

- `withHelp` adds a `docker:` prefix to the error, to indicate the error
  is produced by the `docker` command. This prefix was already present
  in most cases.
- The "--help" hint is slightly updated ("Run 'docker run --help' for
  more information" instead of "See 'docker run --help'"), to make it
  more clear that it's a "call to action".
- An empty is added before the "--help" hint to separate it better from
  the error-message.

Before this patch:

    $ docker run --pull=invalid-option alpine
    docker: invalid pull option: 'invalid-option': must be one of "always", "missing" or "never".
    See 'docker run --help'.
    $ echo $?
    125

    $ docker run --rm alpine nosuchcommand
    docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "nosuchcommand": executable file not found in $PATH: unknown.
    $ echo $?
    127

With this patch:

    $ docker run --pull=invalid-option alpine
    docker: invalid pull option: 'invalid-option': must be one of "always", "missing" or "never"

    Run 'docker run --help' for more information
    $ echo $?
    125

    $ docker run --rm alpine nosuchcommand
    docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "nosuchcommand": executable file not found in $PATH: unknown.

    Run 'docker run --help' for more information
    $ echo $?
    127

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-07-17 15:59:30 +02:00
..
builder test spring-cleaning 2024-07-04 01:35:12 +02:00
checkpoint cli: improve argument validation output 2024-07-05 03:35:14 +02:00
commands remove exec, push, pull, ps, images, info from "legacy" commands 2022-04-08 16:55:39 +02:00
completion cli/command/completion: add FromList utility 2024-07-17 01:25:33 +02:00
config cli: improve argument validation output 2024-07-05 03:35:14 +02:00
container cli/command/container: remove reportError, and put StatusError to use 2024-07-17 15:59:30 +02:00
context Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
formatter replace uses of deprecated API types 2024-07-04 15:22:18 +02:00
idresolver Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
image Merge pull request #5234 from thaJeztah/nicer_missing_commands 2024-07-17 01:22:03 +02:00
inspect Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
manifest cli: improve argument validation output 2024-07-05 03:35:14 +02:00
network Merge pull request #5234 from thaJeztah/nicer_missing_commands 2024-07-17 01:22:03 +02:00
node cli: improve argument validation output 2024-07-05 03:35:14 +02:00
plugin cli: improve argument validation output 2024-07-05 03:35:14 +02:00
registry fix: ctx cancellation on login prompt 2024-07-02 12:07:16 +02:00
secret cli: improve argument validation output 2024-07-05 03:35:14 +02:00
service cli: improve argument validation output 2024-07-05 03:35:14 +02:00
stack cli: improve argument validation output 2024-07-05 03:35:14 +02:00
swarm cli: improve argument validation output 2024-07-05 03:35:14 +02:00
system cli: make cli.StatusError slightly prettier 2024-07-04 22:08:18 +02:00
task linting: address slice-append issues found by gocritic 2023-11-20 16:02:17 +01:00
testdata Dynamically register kubernetes context store endpoint type. 2019-05-20 13:28:11 +01:00
trust cli: improve argument validation output 2024-07-05 03:35:14 +02:00
volume test spring-cleaning 2024-07-04 01:35:12 +02:00
cli.go cli: make initializing the global meter- and tracing providers optional 2024-06-24 15:44:20 +02:00
cli_options.go cli: Wrap Err stream 2024-06-11 17:59:48 +02:00
cli_options_test.go golangci-lint: enable thelper linter 2023-11-20 16:02:17 +01:00
cli_test.go cli: Wrap Err stream 2024-06-11 17:59:48 +02:00
context.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
context_test.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
defaultcontextstore.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
defaultcontextstore_test.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
registry.go fix: ctx cancellation on login prompt 2024-07-02 12:07:16 +02:00
registry_test.go linting: fmt.Sprintf can be replaced with string concatenation (perfsprint) 2024-06-10 21:19:32 +02:00
telemetry.go OTel: implement missing MeterProvider `ForceFlush` 2024-05-15 00:05:31 +01:00
telemetry_docker.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
telemetry_options.go cli: make initializing the global meter- and tracing providers optional 2024-06-24 15:44:20 +02:00
telemetry_utils.go cli: Wrap Err stream 2024-06-11 17:59:48 +02:00
telemetry_utils_test.go cli: Wrap Err stream 2024-06-11 17:59:48 +02:00
trust.go Refactor content_trust cli/flags handling 2018-03-08 15:00:43 -05:00
utils.go fix: ctx cancellation on login prompt 2024-07-02 12:07:16 +02:00
utils_test.go fix: ctx cancellation on login prompt 2024-07-02 12:07:16 +02:00