DockerCLI/man
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
..
src implement docker push -a/--all-tags 2020-01-28 16:21:06 +01:00
Dockerfile.5.md Convert Unused ARG error to warning 2017-06-02 00:10:31 +00:00
README.md Make README less scabious 2017-06-02 00:10:02 +00:00
docker-build.1.md docs: add missing cache-from man docs 2017-06-02 00:11:05 +00:00
docker-config-json.5.md man: mv config-json.5 to docker-config-json.5 2017-06-02 00:07:42 +00:00
docker-run.1.md support --mount type=bind,bind-nonrecursive,... 2019-01-10 12:07:46 +09:00
docker.1.md Update the manuals of docker and dockerd 2017-06-02 00:10:46 +00:00
dockerd.8.md daemon: document --max-download-attempts option 2019-10-15 12:06:58 +02:00
generate.go Introduce functional arguments to NewDockerCli for a more stable API. 2019-01-28 14:52:58 +01:00
import.go Run docs and man generation in CI 2017-06-14 14:59:48 -07:00
md2man-all.sh Convert script shebangs from "#!/bin/bash" to "#!/usr/bin/env bash" 2017-06-02 00:10:54 +00:00

README.md

Docker Documentation

This directory contains scripts for generating the man pages. Many of the man pages are generated directly from the spf13/cobra Command definition. Some legacy pages are still generated from the markdown files in this directory. Do not edit the man pages in the man1 directory. Instead, update the Cobra command or amend the Markdown files for legacy pages.

Generate the man pages

From within the project root directory run:

make manpages