DOCKER(1) Docker User Manuals DOCKER(1)

# [NAME](#NAME)

docker-image-push - Upload an image to a registry

# [SYNOPSIS](#SYNOPSIS)

**docker image push \[OPTIONS] NAME\[:TAG]**

# [DESCRIPTION](#DESCRIPTION)

Use **docker image push** to share your images to the Docker Hub ⟨https://hub.docker.com⟩ registry or to a self-hosted one.

Refer to [**docker-image-tag(1)**](/man/os/docker-cli/docker-image-tag.1) for more information about valid image and tag names.

Killing the **docker image push** process, for example by pressing **CTRL-c** while it is running in a terminal, terminates the push operation.

Registry credentials are managed by [**docker-login(1)**](/man/os/docker-cli/docker-login.1).

# [EXAMPLES](#EXAMPLES)

# [Pushing a new image to a registry](#Pushing_a_new_image_to_a_registry)

First save the new image by finding the container ID (using **docker container ls**) and then committing it to a new image name. Note that only a-z0-9-\_. are allowed when naming images:

```
# docker container commit c16378f943fe rhel-httpd
```

Now, push the image to the registry using the image ID. In this example the registry is on host named **registry-host** and listening on port **5000**. To do this, tag the image with the host name or IP address, and the port of the registry:

```
# docker image tag rhel-httpd registry-host:5000/myadmin/rhel-httpd:latest
# docker image push registry-host:5000/myadmin/rhel-httpd:latest
```

Check that this worked by running:

```
# docker image ls
```

You should see both **rhel-httpd** and **registry-host:5000/myadmin/rhel-httpd** listed.

## [Push all tags of an image](#Push_all_tags_of_an_image)

Use the **-a** (or **--all-tags**) option to push all tags of a local image.

The following example creates multiple tags for an image, and pushes all those tags to Docker Hub.

```
$ docker image tag myimage registry-host:5000/myname/myimage:latest
$ docker image tag myimage registry-host:5000/myname/myimage:v1.0.1
$ docker image tag myimage registry-host:5000/myname/myimage:v1.0
$ docker image tag myimage registry-host:5000/myname/myimage:v1
```

The image is now tagged under multiple names:

```
$ docker image ls
REPOSITORY                          TAG        IMAGE ID       CREATED      SIZE
myimage                             latest     6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   latest     6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   v1         6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   v1.0       6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   v1.0.1     6d5fcfe5ff17   2 hours ago  1.22MB
```

When pushing with the **--all-tags** option, all tags of the **registry-host:5000/myname/myimage** image are pushed:

```
$ docker image push --all-tags registry-host:5000/myname/myimage
The push refers to repository [registry-host:5000/myname/myimage]
195be5f8be1d: Pushed
latest: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
195be5f8be1d: Layer already exists
v1: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
195be5f8be1d: Layer already exists
v1.0: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
195be5f8be1d: Layer already exists
v1.0.1: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
```

# [OPTIONS](#OPTIONS)

**-a**, **--all-tags**\[=false] Push all tags of an image to the repository

**--platform**="" Push a platform-specific manifest as a single-platform image to the registry. Image index won't be pushed, meaning that other manifests, including attestations won't be preserved. 'os\[/arch\[/variant]]': Explicit platform (eg. linux/amd64)

**-q**, **--quiet**\[=false] Suppress verbose output

# [SEE ALSO](#SEE_ALSO)

[**docker-image(1)**](/man/os/docker-cli/docker-image.1)

Sep 2026 Docker Community

---

Document: docker-image-push(1) from docker-cli 29.8.2-r0 (Chainguard OS)
Source: https://github.com/docker/cli
