The Docker CLI
Go to file
Sebastiaan van Stijn f2424bd375
Fix labels copying value from environment variables
This patch fixes a bug where labels use the same behavior as `--env`, resulting
in a value to be copied from environment variables with the same name as the
label if no value is set (i.e. a simple key, no `=` sign, no value).

An earlier pull request addressed similar cases for `docker run`;
2b17f4c8a8, but this did not address the
same situation for (e.g.) `docker service create`.

Digging in history for this bug, I found that use of the `ValidateEnv`
function for  labels was added in the original implementation of the labels feature in
abb5e9a077 (diff-ae476143d40e21ac0918630f7365ed3cR34)

However, the design never intended it to expand environment variables,
and use of this function was either due to either a "copy/paste" of the
equivalent `--env` flags, or a misunderstanding (the name `ValidateEnv` does
not communicate that it also expands environment variables), and the existing
`ValidateLabel` was designed for _engine_ labels (which required a value to
be set).

Following the initial implementation, other parts of the code followed
the same (incorrect) approach, therefore leading the bug to be introduced
in services as well.

This patch:

- updates the `ValidateLabel` to match the expected validation
  rules (this function is no longer used since 31dc5c0a9a),
  and the daemon has its own implementation)
- corrects various locations in the code where `ValidateEnv` was used instead of `ValidateLabel`.

Before this patch:

```bash
export SOME_ENV_VAR=I_AM_SOME_ENV_VAR
docker service create --label SOME_ENV_VAR --tty --name test busybox

docker service inspect --format '{{json .Spec.Labels}}' test
{"SOME_ENV_VAR":"I_AM_SOME_ENV_VAR"}
```

After this patch:

```bash
export SOME_ENV_VAR=I_AM_SOME_ENV_VAR
docker service create --label SOME_ENV_VAR --tty --name test busybox

docker container inspect --format '{{json .Config.Labels}}' test
{"SOME_ENV_VAR":""}
```

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2019-03-19 03:01:57 +01:00
.github Remove myself from codeowners 😅 2019-01-10 17:32:07 +01:00
cli Fix labels copying value from environment variables 2019-03-19 03:01:57 +01:00
cli-plugins cli-plugins: disable use of dial-stdio 2019-03-18 10:58:51 +00:00
cmd/docker allow plugins to have argument which match a top-level flag. 2019-03-13 11:28:17 +00:00
contrib/completion Update to shellcheck v0.6.0 2019-02-26 15:12:52 +01:00
dockerfiles Bump Golang 1.12.1 2019-03-18 14:47:24 +01:00
docs Merge pull request #1663 from cwilhit/crwilhit-WindowsDocs-Update 2019-03-19 02:33:32 +01:00
e2e Merge pull request #1745 from ijc/disable-dial-stdio-for-plugins 2019-03-18 12:29:41 +01:00
experimental Fix link to Kubernetes blog 2018-12-29 01:39:54 +01:00
internal fix subscription filter 2019-03-18 14:57:30 +01:00
kubernetes Handle version v1alpha3 2019-01-24 20:24:45 +01:00
man Add exit status to docker exec manpage 2019-02-25 18:59:18 +00:00
opts Fix labels copying value from environment variables 2019-03-19 03:01:57 +01:00
scripts Merge pull request #1713 from thaJeztah/fix_plugin_test 2019-03-14 16:22:05 +01:00
service/logs Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
templates Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
types Remove unused helath check func 2018-10-02 20:52:34 +02:00
vendor Update containerd 1.2.4 and dependencies 2019-03-02 13:44:57 +01:00
.dockerignore make go build and docker build operations faster 2017-04-27 15:06:57 -07:00
.gitignore Update gitignore 2017-09-27 16:45:35 +02:00
.mailmap Update authors 2019-02-04 08:25:01 +01:00
AUTHORS Update authors 2019-02-04 08:25:01 +01:00
CONTRIBUTING.md Add Contribution guidelines 2017-07-28 11:33:19 -07:00
Jenkinsfile Add a Jenkinsfile 2017-08-16 10:46:43 -04:00
LICENSE Add project files 2017-04-17 17:49:33 -04:00
MAINTAINERS Remove outdated completion reviewers file 2018-08-01 15:08:36 +02:00
Makefile Better coverage output, removing unnecessary unit scripts. 2019-02-01 11:16:20 +01:00
NOTICE Add project files 2017-04-17 17:49:33 -04:00
README.md Add jenkins build status to readme 2017-09-15 15:08:28 +02:00
TESTING.md Update TESTING.md to replace testify by gotest.tools 2018-07-02 09:24:28 +02:00
VERSION Bump version to 19.03.0-dev 2018-09-11 13:06:49 +02:00
appveyor.yml Bump Golang 1.12.1 2019-03-18 14:47:24 +01:00
circle.yml CircleCI: Increase no-output timeout to 15 minutes for vendoring 2019-03-18 13:07:22 +01:00
codecov.yml Fix PR comments 2018-01-03 10:23:32 +01:00
docker.Makefile Use `$(DOCKER_RUN)` for cli plugins build. 2019-03-04 10:17:58 +00:00
gometalinter.json Add support for kubernetes in docker cli 2017-12-26 11:22:32 +01:00
poule.yml Add github templates and initial poule configuration 2017-05-09 16:57:46 +02:00
vendor.conf Update containerd 1.2.4 and dependencies 2019-03-02 13:44:57 +01:00

README.md

build status Build Status

docker/cli

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 a linux binary:

$ make -f docker.Makefile binary

Build binaries for all supported platforms:

$ make -f docker.Makefile cross

Run all linting:

$ make -f docker.Makefile lint

List all the available targets:

$ make help

In-container development environment

Start an interactive development environment:

$ make -f docker.Makefile shell

In the development environment you can run many tasks, including build binaries:

$ make binary

Legal

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.