如何重命名远程注册表中的 docker 镜像

mai*_*mer 5 docker docker-registry

我的远程 docker 注册表中有一个图像:

xx.xx.xx.xx:5000/library/ruby:2.2.1
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法或现有的命令来重命名它?

我知道我可以通过执行实现这个docker pull它的本地和将其重命名docker tag,然后docker push再。

docker pull xx.xx.xx.xx:5000/library/ruby:2.2.1
docker tag xx.xx.xx.xx:5000/library/ruby:2.2.1  xx.xx.xx:5000/library/new_name:latest
docker push xx.xx.xx.xx:5000/library/new_name:latest
Run Code Online (Sandbox Code Playgroud)

但是由于拉取和推送图像需要时间,我想知道是否有一种快速重命名的方法?

Neg*_*iri 2

有两种不同的方法:


a)如果您只想更改标签
答案/sf/answers/2685373351/仅适用于更改标签


b)如果您也想更改存储库名称:

非常感谢这一点,我也更改了 repoName!

(在他的Github项目的帮助下):

1- 获取清单(在 v2 模式中)
2- 在新仓库中发布每个 layer.digest
3- 发布 config.layer
4- 将整个清单放入新仓库


细节:

1-reg:5000/v2/{oldRepo}/manifests/{oldtag}带有accept标头的 GET 清单:application/vnd.docker.distribution.manifest.v2+json

2-对于每一层:POST reg:5000/v2/{newRepo}/blobs/uploads/?mount={layer.digest}&from={oldRepoNameWithaoutTag}

3- 后 reg:5000/v2/{newRepo}/blobs/uploads/?mount={config.digest}&from={oldRepoNameWithaoutTag}

4- PUT reg:5000/v2/{newRepo}/manifests/{newTag}content-type标头:application/vnd.docker.distribution.manifest.v2+json以及body来自步骤 1 的响应

5-享受吧!