The Docker CLI
Go to file
Sebastiaan van Stijn 13e842a110
cli/config: add synchronisation for configDir (Dir, SetDir)
commit 8a30653ed5 introduced a sync.Once
to allow for the config-directory (and home-dir) to be looked up lazily
instead of in an `init()`.

However, the package-level `configDir` variable can be set through two
separate paths; implicitly (through `config.Dir()`), and explicitly,
through `config.SetDir()`. The existing code had no synchronisation for
this, which could lead to a potential race-condition (code requesting
`config.Dir()` and code setting a custom path through `config.SetDir()`).

This patch adds synchronisation by triggering the `sync.Once` as part of
`config.SetDir()` to prevent it being triggered later (overwriting the
value that was set). It also restores the `resetConfigDir()` utility that
was removed in 379122b033, to allow resetting
the `sync.Once` for this test.

In general, we should get rid of this package-level variable, and store
it as a config on the client (passing the option to locations where its
used instead).

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-06-28 12:58:26 +02:00
.circleci dummy circleci config 2022-02-25 21:15:39 +01:00
.github update go to go1.20.5 2023-06-14 21:17:09 +02:00
cli cli/config: add synchronisation for configDir (Dir, SetDir) 2023-06-28 12:58:26 +02:00
cli-plugins cli-plugins: remove deprecated Metadata.Experimental 2023-06-12 14:53:30 +02:00
cmd/docker remove pre-go1.17 build-tags 2023-05-05 18:23:03 +02:00
contrib/completion contrib/completion: remove aufs, legacy overlay 2023-05-19 00:59:25 +02:00
dockerfiles Dockerfile: update buildx to v0.11.0 2023-06-21 11:41:27 +02:00
docs Merge pull request #4289 from dvdksn/docs/update-link-overlay-driver 2023-06-27 09:27:13 +02:00
e2e update go to go1.20.5 2023-06-14 21:17:09 +02:00
experimental experimental: fix broken link to "checkpoint and restore" page 2021-09-07 13:30:48 +02:00
internal/test e2e: Skip tests with platform-specific digests on other platforms 2023-04-27 10:57:56 +02:00
man docs: move "--detach-keys" example to examples section 2023-06-08 14:35:03 +02:00
opts remove pre-go1.17 build-tags 2023-05-05 18:23:03 +02:00
scripts e2e: Update alpine to 3.17.2 2023-04-27 10:58:02 +02:00
service/logs service/logs: use strings.Cut 2022-12-29 15:19:31 +01:00
templates staticcheck: ignore SA1019: strings.Title is deprecated 2022-03-28 17:23:06 +02:00
vendor vendor: github.com/moby/swarmkit/v2 v2.0.0-20230607145746-36334ed18760 2023-06-12 11:31:41 +02: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 Use gofumpt if available, and enable gofumpt linter 2022-09-30 19:14:36 +02:00
.mailmap Update mailmap and AUTHORS 2022-12-01 10:04:48 +01:00
AUTHORS Update AUTHORS header to indicate it's generated 2022-12-01 10:05:22 +01:00
CONTRIBUTING.md Use gofumpt if available, and enable gofumpt linter 2022-09-30 19:14:36 +02:00
Dockerfile Dockerfile: update buildx to v0.11.0 2023-06-21 11:41:27 +02:00
LICENSE Add project files 2017-04-17 17:49:33 -04:00
MAINTAINERS MAINTAINERS: add myself as curator 2023-02-07 10:13:53 -07: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: fix badges 2023-01-13 19:18:26 +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 go to go1.20.5 2023-06-14 21:17:09 +02:00
docker.Makefile docs: generate markdown 2023-01-06 22:36:47 +01:00
vendor.mod vendor: github.com/moby/swarmkit/v2 v2.0.0-20230607145746-36334ed18760 2023-06-12 11:31:41 +02:00
vendor.sum vendor: github.com/moby/swarmkit/v2 v2.0.0-20230607145746-36334ed18760 2023-06-12 11:31:41 +02:00

README.md

Docker CLI

PkgGoDev Build Status Test Status Go Report Card Codecov

About

This repository is the home of the cli used in the Docker CE and Docker EE products.

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.