将远程标记添加到docker映像
在私有注册表(myregistry.com)上,假设我有一个标记为“v1.2.3”的图像。然后我推它过去:将远程标记添加到docker映像,docker,Docker,在私有注册表(myregistry.com)上,假设我有一个标记为“v1.2.3”的图像。然后我推它过去: docker push myregistry.com/myimage:v1.2.3 如果我想关联另一个标记,比如“staging”,并将该标记推送到我的注册表,我可以: docker tag myregistry.com/myimage:v1.2.3 myregistry.com/myimage:staging docker push myregistry.com/myimage:stag
docker push myregistry.com/myimage:v1.2.3
如果我想关联另一个标记,比如“staging”,并将该标记推送到我的注册表,我可以:
docker tag myregistry.com/myimage:v1.2.3 myregistry.com/myimage:staging
docker push myregistry.com/myimage:staging
尽管这样做有效,第二个
docker push
仍会在每个图像中运行,并尝试推送它(尽管跳过上载)。是否有更好的方法只添加远程标记?如您所述,docker标记。。。;docker push…
是将标签添加到图像并共享它的最佳方式
在您给出的特定示例中,两个标记位于同一个repo中(myregistry.com/myimage
)。在这种情况下,您只需docker push myregistry.com/myimage
,默认情况下docker
守护进程将同时推送repo的所有标记,为共享层保存层上的迭代
您也可以使用相同的过程(docker tag…;docker push…
)在存储库之间标记图像,例如
docker tag myregistry.com/myimage:v1.2.3 otherregistry.com/theirimage:v2
docker push otherregistry.com/theirimage
pull/tag/push方法将花费时间和网络成本,您可以使用以下方法远程标记图像: 只有更改标记时,答案才有效,但我也想更改存储库名称 多亏了,我也改了名字 (在他的项目的帮助下): 1-获取清单(在v2模式中)
2-在新回购协议中发布每一层。摘要
3-后期配置层
4-将全部清单提交新回购协议
细节: 1-使用
accept
header:application/vnd.docker.distribution.manifest.v2+json
2-对于每一层:POSTreg:5000/v2/{newRepo}/blobs/uploads/?mount={layer.digest}&from={oldRepoNameWithaoutTag}
3-POSTreg:5000/v2/{newRepo}/blobs/uploads/?mount={config.digest}&from={oldRepoNameWithaoutTag}
4-PUTreg:5000/v2/{newRepo}/manifests/{newTag}
带有内容类型
标题:应用程序/vnd.docker.distribution.manifest.v2+json
和正文
5-尽情享受吧 如果我只想标记一个图像,只需推几个图像,该怎么办?i、 e.假设我的本地docker存储v.1.1
,v.1.2
和v.1.3
。我想用v.1.3
标记latest
,并同时推送v.1.3
和latest
,但保留旧版本?如果您有网络或时间问题,您可以使用这种方法:我用这种方法得到这个错误,知道吗?错误:{“errors”:[{“code”:“MANIFEST\u INVALID”,“message”:“MANIFEST INVALID”,“detail”:“损坏的MANIFEST my app name:由于输入结束,没有要映射的内容”\n在[Source:(com.amazonaws.services.s3.model.S3ObjectInputStream);行:1,列:0]“}]
@xbmono您也可以提供您的完整请求吗?抱歉,Negar。我不得不恢复我所有的更改,因为这种方法不起作用,我现在没有实际的请求。谢谢你回复我的评论。