首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将远程标签添加到docker镜像

将远程标签添加到docker镜像
EN

Stack Overflow用户
提问于 2014-11-06 01:29:11
回答 5查看 19.8K关注 0票数 21

在私有注册表(myregistry.com)上,假设我有一个标记为“v1.2.3”的映像。然后我将其推入:

docker push myregistry.com/myimage:v1.2.3

如果我想关联另一个标记,比如'staging',并将该标记推送到我的注册表,我可以:

代码语言:javascript
复制
docker tag myregistry.com/myimage:v1.2.3 myregistry.com/myimage:staging
docker push myregistry.com/myimage:staging

虽然这是可行的,但第二个docker push仍然遍历每个图像,试图推送它(尽管跳过了上传)。有没有更好的方法来添加远程标记呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-06 06:04:01

正如您所说的,docker tag ...; docker push ...是将标签添加到图像并共享它的最佳方式。

在您给出的特定示例中,这两个标签位于同一存储库(myregistry.com/myimage)中。在这种情况下,您可以只使用docker push myregistry.com/myimage,默认情况下,docker守护进程将同时推送存储库的所有标记,从而为共享层保存层迭代。

您也可以使用相同的过程(docker tag ...; docker push ...)在存储库之间标记图像,例如

代码语言:javascript
复制
docker tag myregistry.com/myimage:v1.2.3 otherregistry.com/theirimage:v2
docker push otherregistry.com/theirimage
票数 26
EN

Stack Overflow用户

发布于 2020-01-20 19:10:00

pull/ tag /push方式会有时间和网络成本,您可以通过以下方式远程标记您的镜像:

只有在更改标签时,answer https://stackoverflow.com/a/38362476/8430173才能正常工作,但我还想更改存储库名称。

多亏了this,我也改变了repoName!

(通过他的Github项目的帮助):

1-获取清单(在v2架构中)

2-发布新存储库中的每个layer.digest

3- post config.layer

4-将整个清单放入新的存储库

详细信息:

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

2- for layer:POST reg:5000/v2/{newRepo}/blobs/uploads/?mount={layer.digest}&from={oldRepoNameWithaoutTag}

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

4- PUT reg:5000/v2/{newRepo}/manifests/{newTag} with content-type header:来自步骤1响应的application/vnd.docker.distribution.manifest.v2+jsonbody

5-尽情享受!

票数 4
EN

Stack Overflow用户

发布于 2021-12-30 01:30:30

您可以使用docker buildx imagetools create实现这一点

代码语言:javascript
复制
docker buildx imagetools create myregistry.com/myimage:v1.2.3 --tag myregistry.com/myimage:staging

这将简单地下载myregistry.com/myimage:v1.2.3的图像清单,并将其重新标记(并推送)为myregistry.com/myimage:staging

注意:当您“重新标记”时(例如,当您的映像是为linux/arm64和linux/AMD64构建的)时,这也将保留多平台清单列表。传统的docker pull/push策略将仅保留执行pull/push的系统的平台/体系结构的映像清单。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26763427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档