The Docker CLI
Go to file
Sebastiaan van Stijn 9e620e990f
implement docker push -a/--all-tags
The `docker push` command up until [v0.9.1](https://github.com/moby/moby/blob/v0.9.1/api/client.go#L998)
always pushed all tags of a given image, so `docker push foo/bar` would push (e.g.)
all of  `foo/bar:latest`, `foo:/bar:v1`, `foo/bar:v1.0.0`.

Pushing all tags of an image was not desirable in many case, so docker v0.10.0
enhanced `docker push` to optionally specify a tag to push (`docker push foo/bar:v1`)
(see https://github.com/moby/moby/issues/3411 and the pull request that implemented
this: https://github.com/moby/moby/pull/4948).

This behavior exists up until today, and is confusing, because unlike other commands,
`docker push` does not default to use the `:latest` tag when omitted, but instead
makes it push "all tags of the image"

For example, in the following situation;

```
docker images

REPOSITORY          TAG                        IMAGE ID            CREATED             SIZE
thajeztah/myimage   latest                     b534869c81f0        41 hours ago        1.22MB
```

Running `docker push thajeztah/myimage` seemingly does the expected behavior (it
pushes `thajeztah/myimage:latest` to Docker Hub), however, it does not so for the
reason expected (`:latest` being the default tag), but because `:latest` happens
to be the only tag present for the `thajeztah/myimage` image.

If another tag exists for the image:

```
docker images

REPOSITORY          TAG                        IMAGE ID            CREATED             SIZE
thajeztah/myimage   latest                     b534869c81f0        41 hours ago        1.22MB
thajeztah/myimage   v1.0.0                     b534869c81f0        41 hours ago        1.22MB
```

Running the same command (`docker push thajeztah/myimage`) will push _both_ images
to Docker Hub.

> Note that the behavior described above is currently not (clearly) documented;
> the `docker push` reference documentation (https://docs.docker.com/engine/reference/commandline/push/)
does not mention that omitting the tag will push all tags

This patch changes the default behavior, and if no tag is specified, `:latest` is
assumed. To push _all_ tags, a new flag (`-a` / `--all-tags`) is added, similar
to the flag that's present on `docker pull`.

With this change:

- `docker push myname/myimage` will be the equivalent of `docker push myname/myimage:latest`
- to push all images, the user needs to set a flag (`--all-tags`), so `docker push --all-tags myname/myimage:latest`

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-01-28 16:21:06 +01:00
.github Remove myself from codeowners 😅 2019-01-10 17:32:07 +01:00
cli implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
cli-plugins docker info: list CLI plugins alphabetically 2019-12-31 14:33:07 +01:00
cmd/docker Use command.Cli instead of command.DockerCli 2019-04-26 15:43:03 +01:00
contrib/completion implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
dockerfiles Update Golang 1.12.15 2020-01-17 15:00:22 +01:00
docs implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
e2e implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
experimental Remove experimental "deploy" from "dab" files 2019-12-09 10:34:14 +01:00
internal/test Remove "docker engine" subcommands 2019-12-12 17:51:25 +01:00
kubernetes Use underlying `NewKubernetesConfig` directly from compose-on-kubernetes. 2019-05-14 15:43:15 +01:00
man implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
opts opts: fix formatting of comments 2020-01-16 12:48:09 +01:00
scripts Merge pull request #1856 from arthrp/master 2020-01-20 14:04:39 +01:00
service/logs service/logs: Using the variable on range scope `testcase` in function literal (scopelint) 2019-10-31 19:22:33 +01:00
templates Fix docker ps table headers with custom format and "split" or "join" 2019-12-27 12:36:02 +01:00
vendor bump imdario/mergo v0.3.8 2020-01-21 14:08:10 +00:00
.dockerignore Update dockerignore 2019-08-12 11:28:57 +02:00
.gitignore Update gitignore 2017-09-27 16:45:35 +02:00
.golangci.yml Remove now obsolete gometalinter and use golangci-lint instead 2019-10-31 19:22:44 +01:00
.mailmap Update AUTHORS and mailmap 2019-08-11 21:53:44 +02:00
AUTHORS Update AUTHORS and mailmap 2019-08-11 21:53:44 +02:00
CONTRIBUTING.md Add Contribution guidelines 2017-07-28 11:33:19 -07:00
Jenkinsfile e2e: enable buildkit 2019-08-12 11:29:04 +02:00
LICENSE Add project files 2017-04-17 17:49:33 -04:00
MAINTAINERS Maintainers: remove Justin and Aaron 2019-12-04 13:08:15 +01:00
Makefile Add docker-compose schema v3.9 2019-08-30 10:58:05 +02:00
NOTICE switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
README.md update Jenkins Build Status urls for README 2019-10-24 11:21:12 -04: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.09.0-dev 2019-05-10 17:30:44 -07:00
appveyor.yml Update Golang 1.12.15 2020-01-17 15:00:22 +01:00
circle.yml CircleCI: add some info steps, and re-group jobs 2019-10-25 12:48:55 +02:00
codecov.yml Fix PR comments 2018-01-03 10:23:32 +01:00
docker.Makefile Add docker-compose schema v3.9 2019-08-30 10:58:05 +02:00
poule.yml Add github templates and initial poule configuration 2017-05-09 16:57:46 +02:00
vendor.conf bump imdario/mergo v0.3.8 2020-01-21 14:08:10 +00: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.