moby/client
Ian Campbell 9b001c4f5f Correct CPU usage calculation in presence of offline CPUs and newer Linux
In https://github.com/torvalds/linux/commit/5ca3726 (released in v4.7-rc1) the
content of the `cpuacct.usage_percpu` file in sysfs was changed to include both
online and offline cpus. This broke the arithmetic in the stats helpers used by
`docker stats`, since it was using the length of the PerCPUUsage array as a
proxy for the number of online CPUs.

Add current number of online CPUs to types.StatsJSON and use it in the
calculation.

Keep a fallback to `len(v.CPUStats.CPUUsage.PercpuUsage)` so this code
continues to work when talking to an older daemon. An old client talking to a
new daemon will ignore the new field and behave as before.

Fixes #28941.

Signed-off-by: Ian Campbell <ian.campbell@docker.com>
(cherry picked from commit 115f91d757)
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
2017-03-13 16:16:05 -07:00
..
testdata Move engine-api client package 2016-09-07 11:05:58 -07:00
checkpoint_create.go Move engine-api client package 2016-09-07 11:05:58 -07:00
checkpoint_create_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
checkpoint_delete.go Allow providing a custom storage directory for docker checkpoints 2016-10-28 07:56:05 -04:00
checkpoint_delete_test.go Allow providing a custom storage directory for docker checkpoints 2016-10-28 07:56:05 -04:00
checkpoint_list.go Allow providing a custom storage directory for docker checkpoints 2016-10-28 07:56:05 -04:00
checkpoint_list_test.go Allow providing a custom storage directory for docker checkpoints 2016-10-28 07:56:05 -04:00
client.go Correct CPU usage calculation in presence of offline CPUs and newer Linux 2017-03-13 16:16:05 -07:00
client_mock_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
client_test.go Merge pull request #26402 from qudongfang/ensure_client_transport_be_closed 2016-10-26 11:51:51 -07:00
client_unix.go Move engine-api client package 2016-09-07 11:05:58 -07:00
client_windows.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_attach.go Add Logs to ContainerAttachOptions 2016-10-19 11:39:00 -04:00
container_commit.go Use IDResponse for container create response. 2016-10-31 11:16:02 -04:00
container_commit_test.go Use IDResponse for container create response. 2016-10-31 11:16:02 -04:00
container_copy.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_copy_test.go Optimize the log info for client test 2016-12-07 16:22:57 -08:00
container_create.go Merge pull request #30113 from thaJeztah/fix-autoremove-on-older-api 2017-02-17 22:04:44 -08:00
container_create_test.go Merge pull request #30113 from thaJeztah/fix-autoremove-on-older-api 2017-02-17 22:04:44 -08:00
container_diff.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_diff_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_exec.go always add but hide experimental cmds and flags 2016-11-08 04:55:27 -08:00
container_exec_test.go Add an IDResponse type 2016-10-31 11:16:02 -04:00
container_export.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_export_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_kill.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_kill_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_list.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
container_list_test.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
container_logs.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_logs_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_pause.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_pause_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_prune.go Convert DanglingOnly to Filters for docker image prune 2016-12-07 16:08:18 -08:00
container_remove.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_remove_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_rename.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_rename_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_resize.go Windows: OCI process struct convergence 2016-09-19 10:34:31 -07:00
container_resize_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_restart.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_restart_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_start.go Allow providing a custom storage directory for docker checkpoints 2016-10-28 07:56:05 -04:00
container_start_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_stats.go Tidy GetDockerOS() function 2016-11-09 14:46:53 -08:00
container_stats_test.go Merge pull request #26436 from stevvooe/remove-transport-package 2016-09-20 16:43:56 +02:00
container_stop.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_stop_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_top.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_top_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_unpause.go Move engine-api client package 2016-09-07 11:05:58 -07:00
container_unpause_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
container_update.go Generate container update response from swagger spec. 2016-10-31 11:16:02 -04:00
container_update_test.go Generate container update response from swagger spec. 2016-10-31 11:16:02 -04:00
container_wait.go Generate ContainerWait response from the swagger spec. 2016-10-31 11:19:53 -04:00
container_wait_test.go Generate ContainerWait response from the swagger spec. 2016-10-31 11:19:53 -04:00
disk_usage.go Add DiskUsage method to SystemApiclient 2016-09-29 07:42:53 -07:00
errors.go Support plugins in docker inspect 2016-12-05 00:39:30 -08:00
events.go Fixes a race condition in client events monitoring 2017-01-04 12:44:54 +01:00
events_test.go Refactor to new events api 2016-09-22 14:42:06 -04:00
hijack.go Refactor client/request 2016-10-31 17:36:49 -04:00
image_build.go Tidy GetDockerOS() function 2016-11-09 14:46:53 -08:00
image_build_test.go Fix processing of unset build-args during build 2016-12-09 14:24:00 -08:00
image_create.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_create_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_history.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_history_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_import.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_import_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_list.go Fixes ImageList to be retro-compatible with older API 2016-11-29 14:10:44 -08:00
image_list_test.go Fixes ImageList to be retro-compatible with older API 2016-11-29 14:10:44 -08:00
image_load.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_load_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_prune.go Convert DanglingOnly to Filters for docker image prune 2016-12-07 16:08:18 -08:00
image_pull.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_pull_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_push.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_push_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_remove.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_remove_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_save.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_save_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
image_search.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_search_test.go api/types/container,client: gofmt 2016-12-07 16:23:00 -08:00
image_tag.go Move engine-api client package 2016-09-07 11:05:58 -07:00
image_tag_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
info.go Move engine-api client package 2016-09-07 11:05:58 -07:00
info_test.go api: types: keep info.SecurityOptions a string slice 2016-11-21 14:45:05 -08:00
interface.go Add docker plugin upgrade 2017-02-03 19:14:56 -05:00
interface_experimental.go move plugins out of experimental 2016-11-10 15:51:32 -08:00
interface_stable.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
login.go generate AuthResponse type from swagger spec. 2016-10-31 11:16:03 -04:00
network_connect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
network_connect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
network_create.go Move engine-api client package 2016-09-07 11:05:58 -07:00
network_create_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
network_disconnect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
network_disconnect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
network_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
network_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
network_list.go Move engine-api client package 2016-09-07 11:05:58 -07:00
network_list_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
network_prune.go Convert DanglingOnly to Filters for docker image prune 2016-12-07 16:08:18 -08:00
network_remove.go Move engine-api client package 2016-09-07 11:05:58 -07:00
network_remove_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
node_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
node_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
node_list.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
node_list_test.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
node_remove.go Move engine-api client package 2016-09-07 11:05:58 -07:00
node_remove_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
node_update.go Move engine-api client package 2016-09-07 11:05:58 -07:00
node_update_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
ping.go always add but hide experimental cmds and flags 2016-11-08 04:55:27 -08:00
plugin_create.go Add plugin create functionality. 2016-11-09 15:23:03 -08:00
plugin_disable.go Enforce zero plugin refcount during disable. 2016-12-27 13:19:25 -08:00
plugin_disable_test.go Enforce zero plugin refcount during disable. 2016-12-27 13:19:25 -08:00
plugin_enable.go Add HTTP client timeout. 2016-11-22 11:23:20 -08:00
plugin_enable_test.go Add HTTP client timeout. 2016-11-22 11:23:20 -08:00
plugin_inspect.go refactor plugin install 2016-12-07 16:10:24 -08:00
plugin_inspect_test.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_install.go Add docker plugin upgrade 2017-02-03 19:14:56 -05:00
plugin_list.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_list_test.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_push.go Implement content addressability for plugins 2016-12-27 13:31:14 -08:00
plugin_push_test.go Implement content addressability for plugins 2016-12-27 13:31:14 -08:00
plugin_remove.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_remove_test.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_set.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_set_test.go Make experimental a runtime flag 2016-10-24 15:20:01 -07:00
plugin_upgrade.go Add docker plugin upgrade 2017-02-03 19:14:56 -05:00
README.md Rename Remote API to Engine API 2016-11-22 16:49:58 -08:00
request.go always add but hide experimental cmds and flags 2016-11-08 04:55:27 -08:00
request_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
secret_create.go update secret create url for consistency 2016-11-22 11:22:39 -08:00
secret_create_test.go update secret create url for consistency 2016-11-22 11:22:39 -08:00
secret_inspect.go secrets: secret management for swarm 2016-11-09 14:27:43 -05:00
secret_inspect_test.go secrets: secret management for swarm 2016-11-09 14:27:43 -05:00
secret_list.go review updates 2016-11-09 14:27:45 -05:00
secret_list_test.go review updates 2016-11-09 14:27:45 -05:00
secret_remove.go secrets: secret management for swarm 2016-11-09 14:27:43 -05:00
secret_remove_test.go secrets: secret management for swarm 2016-11-09 14:27:43 -05:00
secret_update.go Add SecretUpdate method to client 2017-01-26 06:38:25 -08:00
secret_update_test.go Add SecretUpdate method to client 2017-01-26 06:38:25 -08:00
service_create.go Move engine-api client package 2016-09-07 11:05:58 -07:00
service_create_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
service_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
service_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
service_list.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
service_list_test.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
service_logs.go api: Service Logs support 2016-11-10 13:46:02 -08:00
service_logs_test.go api: Service Logs support 2016-11-10 13:46:02 -08:00
service_remove.go Move engine-api client package 2016-09-07 11:05:58 -07:00
service_remove_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
service_update.go Return warnings from service create and service update when digest pinning fails 2016-11-18 13:57:11 -08:00
service_update_test.go Return warnings from service create and service update when digest pinning fails 2016-11-18 13:57:11 -08:00
swarm_get_unlock_key.go Revise swarm init/update flags, add unlocking capability 2016-11-09 16:09:00 -08:00
swarm_init.go Move engine-api client package 2016-09-07 11:05:58 -07:00
swarm_init_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
swarm_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
swarm_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
swarm_join.go Move engine-api client package 2016-09-07 11:05:58 -07:00
swarm_join_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
swarm_leave.go Move engine-api client package 2016-09-07 11:05:58 -07:00
swarm_leave_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
swarm_unlock.go Add support for swarm init lock and swarm unlock 2016-11-09 16:09:00 -08:00
swarm_update.go Add unlock key rotation 2016-11-09 16:09:01 -08:00
swarm_update_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
task_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
task_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
task_list.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
task_list_test.go Replace all "Filter" field with "Filters" for consistency 2016-11-01 23:09:30 +08:00
transport.go client: deterministically resolve http scheme 2016-10-11 15:53:14 -07:00
utils.go Convert DanglingOnly to Filters for docker image prune 2016-12-07 16:08:18 -08:00
version.go Move engine-api client package 2016-09-07 11:05:58 -07:00
volume_create.go Use a config to generate swagger api types 2016-10-31 11:13:41 -04:00
volume_create_test.go Use a config to generate swagger api types 2016-10-31 11:13:41 -04:00
volume_inspect.go Move engine-api client package 2016-09-07 11:05:58 -07:00
volume_inspect_test.go client: remove transport package 2016-09-19 11:19:55 -07:00
volume_list.go Use a config to generate swagger api types 2016-10-31 11:13:41 -04:00
volume_list_test.go Use a config to generate swagger api types 2016-10-31 11:13:41 -04:00
volume_prune.go Convert DanglingOnly to Filters for docker image prune 2016-12-07 16:08:18 -08:00
volume_remove.go always add but hide experimental cmds and flags 2016-11-08 04:55:27 -08:00
volume_remove_test.go client: remove transport package 2016-09-19 11:19:55 -07: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.NewEnvClient()
	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.