首页 > 解决方案 > 用于 docker 图像的 Skopeo 工具 - 重新标记

问题描述

我正在使用 linux 机器上的 Skopeo 工具下载 docker 映像 - 成功运行

skopeo copy --src-creds uname:pwd docker://url/image:tag dir:/home/image

我正在尝试更改此图像的标签。当前图像标签是“最新”,需要更改为“新”

有什么方法可以使用skopeo 工具重新标记此图像,然后使用新标记上传到注册表。

请注意:Docker 不允许安装在 linux 机器上,因为它需要 root 用户,而我们的项目未经授权。

我正在尝试以下活动顺序

  1. 从存储库下载带有标签“最新”的图像 - 工作
  2. 将图像的标签更改为“新”并上传回存储库 - 工作
  3. 下载带有新标签“新”的图像 - 失败并出现错误。

PFB 命令按顺序排列

skopeo copy --src-creds name:pwd docker://url/alpine:latest dir:/home/alpine

skopeo copy --dest-creds uname:pwd dir:/home/alpine docker://url/alpine:new 

skopeo copy --src-creds uname:pwd docker://url/alpine:new dir:./alpinenew
**FATA[0004] Error initializing source docker://url/alpine:new: Error reading manifest new in url/alpine: manifest unknown: manifest unknown**

如何修复此错误。

标签: docker

解决方案


您不需要“重新标记”图像。在将图像上传到远程存储库时设置标签。例如,要将图像上传为myusername/myimagename:sometag,我可以运行:

skopeo copy dir:/home/image docker://myusername/myimagename:sometag

为了说明这一点,我可以alpine像这样下载图像:

skopeo copy docker://alpine dir:./alpine

然后使用不同的名称和标签将其上传到我自己的命名空间中,如下所示:

skopeo copy dir:alpine docker://larsks/alpinetest:foo

似乎工作得很好

然后我可以下载新图像以验证它是否有效:

$ skopeo copy docker://larsks/alpinetest:foo dir:./alpinetest
Getting image source signatures
Copying blob e6b0cf9c0882 done
Copying config cc0abc535e done
Writing manifest to image destination
Storing signatures

在两个位置使用相同的图像名称就可以正常工作:

skopeo copy docker://larsks/alpinetest:foo dir:./alpinetest
skopeo copy dir:./alpinetest docker://larsks/alpinetest:bar

会为图像添加一个新标签


推荐阅读