DockerCLI/e2e
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
..
cli-plugins e2e: fix formatting of comments 2020-01-16 12:46:07 +01:00
container Add content trust tests for run command 2020-01-20 14:18:52 +01:00
context e2e: add a test for `context ls` 2019-05-20 13:28:11 +01:00
global e2e: add new test package "global" with TestTLSVerify 2019-11-12 18:07:09 +00:00
image implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
internal/fixtures e2e: fix formatting of comments 2020-01-16 12:46:07 +01:00
plugin Fix: plugin-tests discarding current environment 2019-03-04 20:18:24 +01:00
stack Remove experimental "deploy" from "dab" files 2019-12-09 10:34:14 +01:00
system Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
testdata e2e: avoid `usermod -p` by using `useradd`'s `--password` option 2019-03-11 14:25:41 +00:00
trust e2e: remove unnecessary trailing newline (whitespace) 2019-10-31 19:22:37 +01:00
compose-env.connhelper-ssh.yaml connhelper: add e2e 2018-09-30 10:24:34 +09:00
compose-env.experimental.yaml Make test-e2e run against experimental and non-experimental daemon 2018-06-25 11:46:35 +02:00
compose-env.yaml Disable TLS for e2e docker-in-docker daemon 2019-07-29 14:50:23 -07:00