The Docker CLI
Go to file
Sebastiaan van Stijn b642078c87
prevent "docker stats" from hanging if the initial API call fails
When running `docker stats` without a list of containers, `runStats` collects
an initial list of containers. If that API call fails, the error is sent to the
`closeChan`, however, `closeChan` is non-buffered, and nothing is reading the
channel until we received the initial list and start collecting stats.

This patch rewrites the code that gets the initial list of containers to
return the error if the API call fails. The `getContainerList` closure is
also removed and inlined to make the logic somewhat easier to read.

Before this patch, the command would hang without producing output;

    docker stats
    # hangs; no output

With this patch, the error is printed, and the CLI exits:

    docker stats
    Error response from daemon: some error occurred

    echo $?
    1

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-12-20 16:22:11 +01:00
.circleci dummy circleci config 2022-02-25 21:15:39 +01:00
.github build(deps): bump github/codeql-action from 2 to 3 2023-12-14 08:33:33 +00:00
cli prevent "docker stats" from hanging if the initial API call fails 2023-12-20 16:22:11 +01:00
cli-plugins add //go:build directives to prevent downgrading to go1.16 language 2023-12-14 15:03:46 +01:00
cmd/docker add //go:build directives to prevent downgrading to go1.16 language 2023-12-14 15:03:46 +01:00
contrib/completion contrib/completion: remove logentries logging-driver 2023-12-13 13:15:14 +01:00
dockerfiles update to go1.21.5 2023-12-05 23:53:29 +01:00
docs update typos and style in docs 2023-12-19 19:30:55 +01:00
e2e Plumb contexts through commands 2023-12-12 22:30:16 +01:00
experimental experimental: fix broken link to "checkpoint and restore" page 2021-09-07 13:30:48 +02:00
internal/test golangci-lint: revive: enable import-shadowing 2023-11-20 19:52:41 +01:00
man docs, man: remove logentries logging-driver 2023-12-13 13:16:31 +01:00
opts Permit '=' separator and '[ipv6]' in --add-host 2023-12-07 18:29:19 +00:00
scripts update go-md2man to v2.0.3 2023-10-11 18:26:14 +02:00
service/logs service/logs: use strings.Cut 2022-12-29 15:19:31 +01:00
templates add //go:build directives to prevent downgrading to go1.16 language 2023-12-14 15:03:46 +01:00
vendor vendor: github.com/docker/docker 388216fc45ab (v25.0.0-dev) 2023-12-19 20:11:21 +01:00
.dockerignore validate manpages target 2022-02-25 17:11:17 +01:00
.gitattributes fix linguist with .gitattributes 2021-12-16 21:16:02 +01:00
.gitignore validate manpages target 2022-02-25 17:11:17 +01:00
.golangci.yml templates: linting: fix "error return value is not checked (errchkjson) 2023-11-20 19:52:46 +01:00
.mailmap update authors and mailmap 2023-11-13 22:32:27 +01:00
AUTHORS update authors and mailmap 2023-11-13 22:32:27 +01:00
CONTRIBUTING.md - What I did 2023-10-19 16:10:27 -04:00
Dockerfile update to go1.21.5 2023-12-05 23:53:29 +01:00
LICENSE Add project files 2017-04-17 17:49:33 -04:00
MAINTAINERS not actually a maintainer 2023-11-10 21:35:15 +01:00
Makefile docs: generate markdown 2023-01-06 22:36:47 +01:00
NOTICE switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
README.md Readme: remove reference to "Docker EE" 2023-11-28 10:23:11 +01:00
TESTING.md tweak description of login/logout 2022-04-04 10:44:11 +02:00
VERSION Update version to v25.0.0-dev 2023-05-08 08:57:19 +02:00
codecov.yml Drop support for (archived) Compose-on-Kubernetes 2022-02-22 13:47:34 +01:00
docker-bake.hcl update to go1.21.5 2023-12-05 23:53:29 +01:00
docker.Makefile docs: generate markdown 2023-01-06 22:36:47 +01:00
vendor.mod vendor: github.com/docker/docker 388216fc45ab (v25.0.0-dev) 2023-12-19 20:11:21 +01:00
vendor.sum vendor: github.com/docker/docker 388216fc45ab (v25.0.0-dev) 2023-12-19 20:11:21 +01:00

README.md

Docker CLI

PkgGoDev Build Status Test Status Go Report Card Codecov

About

This repository is the home of the Docker CLI.

Development

docker/cli is developed using Docker.

Build CLI from source:

docker buildx bake

Build binaries for all supported platforms:

docker buildx bake cross

Build for a specific platform:

docker buildx bake --set binary.platform=linux/arm64 

Build dynamic binary for glibc or musl:

USE_GLIBC=1 docker buildx bake dynbinary 

Run all linting:

docker buildx bake lint shellcheck

Run test:

docker buildx bake test

List all the available targets:

make help

In-container development environment

Start an interactive development environment:

make -f docker.Makefile shell

Brought to you courtesy of our legal counsel. For more context, please see the NOTICE document in this repo.

Use and transfer of Docker may be subject to certain restrictions by the United States and other governments.

It is your responsibility to ensure that your use and/or transfer does not violate applicable laws.

For more information, please see https://www.bis.doc.gov

Licensing

docker/cli is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.