繁体   English   中英

将带有保留摘要的 Docker 图像重新发布到不同的注册表

[英]Republish Docker Image with Preserved Digest to Different Registry

我从 DockerHub 等公共注册表中提取镜像,并将它们推送到一个单独的私有注册表。 对于image:tag格式的图像,这是一个简单的过程,但对于image@digest格式的图像则不然。

我想重新发布或推送 Docker 的术语,从公共注册表到我的私有注册表的图像,同时保持确切不可变图像的完整性。 我想保留摘要,以便在从我的私有注册表引用的摘要与公共注册表中的图像源之间没有抽象。

我试图在image@digest上执行适用于image:tag的相同docker push命令,但无济于事。

图片:标签推送

docker login -u usr -p psw registry.io
docker image pull docker.io/alpine:3.17.0
docker image push registry.io/alpine:3.17.0
...
ok

图片@摘要:推送

docker login -u usr -p psw registry.io
docker image pull docker.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c
docker image push registry.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c
...
cannot push a digest reference

我想按原样将图像从源重新发布到目标。 我可以执行重新标记或使用不同 ID 的推送,但两者都会导致更改可引用的摘要和似乎不必要的抽象级别。

你想要做的是重命名图像,然后推送它。 当您将映像推送到存储库时,您会将其推送到由映像名称指定的存储库。 因此,首先重命名(实际上更改tag )以包含您要推送到的注册表,然后进行推送。

docker image pull centos:centos7
docker tag centos:centos7 my-registry.io/centos7:centos7
docker push my-registry.io/centos/centos7

我无法使用 Docker 解决此问题。相反,我调查了 Skopeo。 v1.6.0引入了--preserve-digests标志,听起来非常完美。 它是。

我实现如下:

skopeo copy \
    --dest-creds='usr:psw' \
    --preserve-digests \
    --override-arch amd64 \
    docker://docker.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c \
    docker://registry.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c 

完成保留摘要的副本后,我想添加一些额外的内容,但发现文档有点难以浏览。 我最终找到了我正在寻找的所有答案和补充标志,所以我认为我应该在这里发布以防他们帮助别人。 我必须通读在 Skopeo 的复制命令中使用的可用传输(存储库类型),这是我发现--dest-creds--preserve-digests的地方,但我无法发现--override-arch作为立即成为全球标志

有多种工具可用于管理注册表中的映像。 并且大多数支持复制图像,包括多平台清单,而不修改摘要。 一些例子包括:

  • google/go-containerregistry 的起重机( crane copy
  • RedHat 的 skopeo( skopeo copy
  • 我自己的regclient的regctl( regctl image copy

使用 docker CLI 对此不起作用,因为将图像拉到 docker 会将多平台清单取消引用到您平台的图像。 当 docker 推送图像时,它可能会重新生成图像清单 json,可能会丢失注释等数据,或更改间距,并且编组 json 中的任何单个字符更改都会更改摘要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM