If you have a Docker Registry that supports manifest scheme 2, you can simply load the manifest of the existing image under the new tag.
For example, suppose you want to tag the latest version of a busybox image. Stages:
Download existing manifest:
curl '<registry_url>/v2/mybusybox/manifests/latest' \ -H 'accept: application/vnd.docker.distribution.manifest.v2+json' \ > manifest.json
The manifest will look here (note that schemaVersion is 2):
{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "config": { "mediaType": "application/octet-stream", "size": 1459, "digest": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749" }, "layers": [ { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 667590, "digest": "sha256:8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f" } ] }
Download the manifest under the new tag:
curl -XPUT '<registry_url>/v2/mybusybox/manifests/new_tag' \ -H 'content-type: application/vnd.docker.distribution.manifest.v2+json' \ -d '@manifest.json'
A detailed walkthrough is given in post .
source share