moby/client
Sebastiaan van Stijn 74b4974cb7
client: define a "dummy" hostname to use for local connections
For local communications (npipe://, unix://), the hostname is not used,
but we need valid and meaningful hostname.

The current code used the client's `addr` as hostname in some cases, which
could contain the path for the unix-socket (`/var/run/docker.sock`), which
gets rejected by go1.20.6 and go1.19.11 because of a security fix for
[CVE-2023-29406 ][1], which was implemented in  https://go.dev/issue/60374.

Prior versions go Go would clean the host header, and strip slashes in the
process, but go1.20.6 and go1.19.11 no longer do, and reject the host
header.

This patch introduces a `DummyHost` const, and uses this dummy host for
cases where we don't need an actual hostname.

Before this patch (using go1.20.6):

    make GO_VERSION=1.20.6 TEST_FILTER=TestAttach test-integration
    === RUN   TestAttachWithTTY
        attach_test.go:46: assertion failed: error is not nil: http: invalid Host header
    --- FAIL: TestAttachWithTTY (0.11s)
    === RUN   TestAttachWithoutTTy
        attach_test.go:46: assertion failed: error is not nil: http: invalid Host header
    --- FAIL: TestAttachWithoutTTy (0.02s)
    FAIL

With this patch applied:

    make GO_VERSION=1.20.6 TEST_FILTER=TestAttach test-integration
    INFO: Testing against a local daemon
    === RUN   TestAttachWithTTY
    --- PASS: TestAttachWithTTY (0.12s)
    === RUN   TestAttachWithoutTTy
    --- PASS: TestAttachWithoutTTy (0.02s)
    PASS

[1]: https://github.com/advisories/GHSA-f8f7-69v5-w4vx

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 92975f0c11)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-07-15 01:27:29 +02:00
..
testdata Move engine-api client package 2016-09-07 11:05:58 -07:00
build_cancel.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
build_prune.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
checkpoint_create.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
checkpoint_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
checkpoint_delete.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
checkpoint_delete_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
checkpoint_list.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
checkpoint_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
client.go client: define a "dummy" hostname to use for local connections 2023-07-15 01:27:29 +02:00
client_deprecated.go Move deprecated client constructors to a separate file 2019-01-21 15:27:52 +01:00
client_mock_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
client_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
client_unix.go Update to Go 1.17.0, and gofmt with Go 1.17 2022-04-07 23:27:50 +02:00
client_windows.go Introduce NewClientWithOpts func to build custom client easily 2018-02-08 15:26:24 +01:00
config_create.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
config_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
config_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
config_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
config_list.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
config_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
config_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
config_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
config_update.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
config_update_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_attach.go gofmt GoDoc comments with go1.19 2023-02-24 17:05:41 -05:00
container_commit.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_commit_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_copy.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_copy_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_create.go client: remove containerd "platform" dependency 2022-03-22 16:34:19 -04:00
container_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_diff.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_diff_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_exec.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_exec_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_export.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_export_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_kill.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_kill_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_list.go fix nolint comments for SA1019: filters.ToParamWithVersion is deprecated 2019-10-18 00:45:33 +02:00
container_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_logs.go gofmt GoDoc comments with go1.19 2023-02-24 17:05:41 -05:00
container_logs_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_pause.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_pause_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_prune.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_prune_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_rename.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_rename_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_resize.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_resize_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_restart.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_restart_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_start.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_start_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_stats.go Add stats options to not prime the stats 2020-02-28 09:54:37 -08:00
container_stats_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_stop.go Merge pull request #36874 from kolyshkin/stop-timeout 2018-05-30 13:38:42 -04:00
container_stop_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_top.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_top_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_unpause.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_unpause_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_update.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
container_update_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
container_wait.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
container_wait_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
disk_usage.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
disk_usage_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
distribution_inspect.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
distribution_inspect_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
errors.go Replace errors.Cause() with errors.Is() / errors.As() 2020-04-29 00:28:41 +02:00
events.go fix nolint comments for SA1019: filters.ToParamWithVersion is deprecated 2019-10-18 00:45:33 +02:00
events_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
hijack.go client: define a "dummy" hostname to use for local connections 2023-07-15 01:27:29 +02:00
hijack_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_build.go builder-next: allow outputs configuration 2019-03-19 10:28:30 -07:00
image_build_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_create.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
image_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_history.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
image_history_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_import.go client: normalize comment formatting 2019-11-27 15:44:49 +01:00
image_import_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_list.go fix nolint comments for SA1019: filters.ToParamWithVersion is deprecated 2019-10-18 00:45:33 +02:00
image_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_load.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
image_load_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_prune.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
image_prune_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_pull.go Use errdefs for handling errors in client 2019-03-16 00:42:42 +01:00
image_pull_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_push.go client.ImagePush(): default to ":latest" instead of "all tags" 2019-12-10 12:24:14 +01:00
image_push_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
image_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_save.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
image_save_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_search.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
image_search_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
image_tag.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
image_tag_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
info.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
info_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
interface.go Merge pull request #40725 from cpuguy83/check_img_platform 2020-05-21 11:33:27 -07:00
interface_experimental.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
interface_stable.go Add canonical import comment 2018-02-05 16:51:57 -05:00
login.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
network_connect.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
network_connect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_create.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
network_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_disconnect.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
network_disconnect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_list.go fix nolint comments for SA1019: filters.ToParamWithVersion is deprecated 2019-10-18 00:45:33 +02:00
network_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_prune.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
network_prune_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
network_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
network_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
node_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
node_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
node_list.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
node_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
node_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
node_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
node_update.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
node_update_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
options.go Merge pull request #39032 from thaJeztah/improve_version_negotiation 2019-04-20 13:34:22 +02:00
options_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-11 00:06:42 +01:00
ping.go remove extra space in code comment in ping.go 2020-01-20 00:04:53 -05:00
ping_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_create.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
plugin_disable.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
plugin_disable_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_enable.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
plugin_enable_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_install.go Use errdefs for handling errors in client 2019-03-16 00:42:42 +01:00
plugin_list.go fix nolint comments for SA1019: filters.ToParamWithVersion is deprecated 2019-10-18 00:45:33 +02:00
plugin_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_push.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
plugin_push_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
plugin_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_set.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
plugin_set_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
plugin_upgrade.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
README.md Remove use of deprecated client.NewEnvClient() 2019-01-03 22:49:00 +01:00
request.go client: define a "dummy" hostname to use for local connections 2023-07-15 01:27:29 +02:00
request_test.go client: define a "dummy" hostname to use for local connections 2023-07-15 01:27:29 +02:00
secret_create.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
secret_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
secret_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
secret_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
secret_list.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
secret_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
secret_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
secret_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
secret_update.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
secret_update_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_create.go extract logic for resolving image/plugin digest and platform 2020-04-16 21:30:57 +02:00
service_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_list.go Add support for sending down service Running and Desired task counts 2019-10-14 10:43:00 -05:00
service_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_logs.go Improve GetTimestamp parsing 2018-05-20 13:07:17 +02:00
service_logs_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
service_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
service_update.go extract logic for resolving image/plugin digest and platform 2020-04-16 21:30:57 +02:00
service_update_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_get_unlock_key.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
swarm_get_unlock_key_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_init.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
swarm_init_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_inspect.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
swarm_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_join.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
swarm_join_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_leave.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
swarm_leave_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_unlock.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
swarm_unlock_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
swarm_update.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
swarm_update_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
task_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
task_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
task_list.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
task_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
task_logs.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
transport.go Add canonical import comment 2018-02-05 16:51:57 -05:00
utils.go Add canonical import comment 2018-02-05 16:51:57 -05:00
version.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
volume_create.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
volume_create_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
volume_inspect.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
volume_inspect_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
volume_list.go fix nolint comments for SA1019: filters.ToParamWithVersion is deprecated 2019-10-18 00:45:33 +02:00
volume_list_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00
volume_prune.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
volume_remove.go Client: always call ensureReaderClosed 2019-03-18 15:26:21 +01:00
volume_remove_test.go refactor: move from io/ioutil to io and os package 2023-02-24 16:11:55 -05:00

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.