moby--moby/client
Sebastiaan van Stijn 45067cda33
client: remove wrapResponseError()
The wrapResponseError() utility converted some specific errors, but in
doing so, could hide the actual error message returned by the daemon.
In addition, starting with 38e6d474af,
HTTP status codes were already mapped to their corresponding errdefs
types on the client-side, making this conversion redundant.

This patch removes the wrapResponseError() utility; it's worth noting
that some error-messages will change slightly (as they now return the
error as returned by the daemon), but may cointain more details as
before, and in some cases prevents hiding the actual error.

Before this change:

    docker container rm nosuchcontainer
    Error: No such container: nosuchcontainer

    docker container cp mycontainer:/no/such/path .
    Error: No such container:path: mycontainer:/no/such/path

    docker container cp ./Dockerfile mycontainer:/no/such/path
    Error: No such container:path: mycontainer:/no/such

    docker image rm nosuchimage
    Error: No such image: nosuchimage

    docker network rm nosuchnetwork
    Error: No such network: nosuchnetwork

    docker volume rm nosuchvolume
    Error: No such volume: nosuchvolume

    docker plugin rm nosuchplugin
    Error: No such plugin: nosuchplugin

    docker checkpoint rm nosuchcontainer nosuchcheckpoint
    Error response from daemon: No such container: nosuchcontainer

    docker checkpoint rm mycontainer nosuchcheckpoint
    Error response from daemon: checkpoint nosuchcheckpoint does not exist for container mycontainer

    docker service rm nosuchservice
    Error: No such service: nosuchservice

    docker node rm nosuchnode
    Error: No such node: nosuchnode

    docker config rm nosuschconfig
    Error: No such config: nosuschconfig

    docker secret rm nosuchsecret
    Error: No such secret: nosuchsecret

After this change:

    docker container rm nosuchcontainer
    Error response from daemon: No such container: nosuchcontainer

    docker container cp mycontainer:/no/such/path .
    Error response from daemon: Could not find the file /no/such/path in container mycontainer

    docker container cp ./Dockerfile mycontainer:/no/such/path
    Error response from daemon: Could not find the file /no/such in container mycontainer

    docker image rm nosuchimage
    Error response from daemon: No such image: nosuchimage:latest

    docker network rm nosuchnetwork
    Error response from daemon: network nosuchnetwork not found

    docker volume rm nosuchvolume
    Error response from daemon: get nosuchvolume: no such volume

    docker plugin rm nosuchplugin
    Error response from daemon: plugin "nosuchplugin" not found

    docker checkpoint rm nosuchcontainer nosuchcheckpoint
    Error response from daemon: No such container: nosuchcontainer

    docker checkpoint rm mycontainer nosuchcheckpoint
    Error response from daemon: checkpoint nosuchcheckpoint does not exist for container mycontainer

    docker service rm nosuchservice
    Error response from daemon: service nosuchservice not found

    docker node rm nosuchnode
    Error response from daemon: node nosuchnode not found

    docker config rm nosuchconfig
    Error response from daemon: config nosuchconfig not found

    docker secret rm nosuchsecret
    Error response from daemon: secret nosuchsecret not found

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-03-20 19:04:52 +01:00
..
testdata
README.md
build_cancel.go
build_prune.go
checkpoint_create.go
checkpoint_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
checkpoint_delete.go
checkpoint_delete_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
checkpoint_list.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
checkpoint_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
client.go client: add const for environment variables, and document them 2022-03-07 12:35:55 +01:00
client_deprecated.go
client_mock_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
client_test.go client: TestNegotiateAPIVersion(), TestClientRedirect(): use sub-tests 2022-03-07 11:13:52 +01:00
client_unix.go client: add const for environment variables, and document them 2022-03-07 12:35:55 +01:00
client_windows.go client: add const for environment variables, and document them 2022-03-07 12:35:55 +01:00
config_create.go
config_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
config_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
config_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
config_list.go
config_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
config_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
config_remove_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
config_update.go
config_update_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_attach.go
container_commit.go
container_commit_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_copy.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
container_copy_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_create.go
container_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_diff.go
container_diff_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_exec.go
container_exec_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_export.go
container_export_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
container_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_kill.go
container_kill_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_list.go
container_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_logs.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
container_logs_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_pause.go
container_pause_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_prune.go
container_prune_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
container_remove_test.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
container_rename.go
container_rename_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_resize.go
container_resize_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_restart.go
container_restart_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_start.go
container_start_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_stats.go
container_stats_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_stop.go
container_stop_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_top.go
container_top_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_unpause.go
container_unpause_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_update.go
container_update_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
container_wait.go client.ContainerWait(): don't send empty "condition" query parameter 2022-02-14 21:47:53 +01:00
container_wait_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
disk_usage.go
disk_usage_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
distribution_inspect.go
distribution_inspect_test.go
envvars.go client: add const for environment variables, and document them 2022-03-07 12:35:55 +01:00
errors.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
events.go
events_test.go Merge pull request #42770 from thaJeztah/eventtype_enums 2021-08-28 00:23:56 +09:00
hijack.go
hijack_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_build.go
image_build_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_create.go
image_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_history.go
image_history_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_import.go
image_import_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
image_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_list.go
image_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_load.go
image_load_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_prune.go
image_prune_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_pull.go
image_pull_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_push.go
image_push_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
image_remove_test.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
image_save.go
image_save_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_search.go client: ImageSearch(): don't send limit if none was specified 2022-03-15 14:53:46 +01:00
image_search_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
image_tag.go
image_tag_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
info.go
info_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
interface.go
interface_experimental.go
interface_stable.go
login.go
network_connect.go
network_connect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
network_create.go
network_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
network_disconnect.go
network_disconnect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
network_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
network_inspect_test.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
network_list.go
network_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
network_prune.go
network_prune_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
network_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
network_remove_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
node_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
node_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
node_list.go
node_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
node_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
node_remove_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
node_update.go
node_update_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
options.go client: add const for environment variables, and document them 2022-03-07 12:35:55 +01:00
options_test.go client: extract FromEnv parts to separate WithXX options 2022-02-10 17:15:40 +01:00
ping.go
ping_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_create.go
plugin_disable.go
plugin_disable_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_enable.go
plugin_enable_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
plugin_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_install.go
plugin_list.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
plugin_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_push.go
plugin_push_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
plugin_remove_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_set.go
plugin_set_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
plugin_upgrade.go
request.go client: use canonical names for HTTP Headers 2022-03-06 10:49:02 +01:00
request_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
secret_create.go
secret_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
secret_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
secret_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
secret_list.go
secret_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
secret_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
secret_remove_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
secret_update.go
secret_update_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
service_create.go remove unneeded "digest" alias for "go-digest" 2022-03-04 14:49:42 +01:00
service_create_test.go remove unneeded "digest" alias for "go-digest" 2022-03-04 14:49:42 +01:00
service_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
service_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
service_list.go
service_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
service_logs.go
service_logs_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
service_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
service_remove_test.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
service_update.go
service_update_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_get_unlock_key.go
swarm_get_unlock_key_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_init.go
swarm_init_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_inspect.go
swarm_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_join.go
swarm_join_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_leave.go
swarm_leave_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_unlock.go
swarm_unlock_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
swarm_update.go
swarm_update_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
task_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
task_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
task_list.go
task_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
task_logs.go
transport.go
utils.go
version.go
volume_create.go
volume_create_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
volume_inspect.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
volume_inspect_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
volume_list.go
volume_list_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00
volume_prune.go
volume_remove.go client: remove wrapResponseError() 2022-03-20 19:04:52 +01:00
volume_remove_test.go refactor: move from io/ioutil to io and os package 2021-08-27 14:56:57 +08:00

README.md

Go client for the Docker Engine API

The docker command uses this package to communicate with the daemon. It can also be used by your own Go applications to do anything the command-line interface does  running containers, pulling images, managing swarms, etc.

For example, to list running containers (the equivalent of docker ps):

package main

import (
	"context"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	cli, err := client.NewClientWithOpts(client.FromEnv)
	if err != nil {
		panic(err)
	}

	containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
	if err != nil {
		panic(err)
	}

	for _, container := range containers {
		fmt.Printf("%s %s\n", container.ID[:10], container.Image)
	}
}

Full documentation is available on GoDoc.