将远程标记添加到docker映像

将远程标记添加到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

在私有注册表(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: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-对于每一层: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}
带有
内容类型
标题:
应用程序/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。我不得不恢复我所有的更改,因为这种方法不起作用,我现在没有实际的请求。谢谢你回复我的评论。