首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ECR中标记多平台映像将创建无标记的清单。

在ECR中标记多平台映像将创建无标记的清单。
EN

Stack Overflow用户
提问于 2021-08-15 09:10:06
回答 3查看 1.8K关注 0票数 8

我已经开始使用docker来标记mutli平台映像并将其推送到ECR。但是,ECR似乎将标记应用于父清单,并将每个相关清单保留为无标记。ECR似乎确实防止删除子清单,但它使管理孤儿无标记图像的清除变得复杂。

有没有办法以某种方式标记这些孩子的清单?

例如,考虑一下这种推动:

代码语言:javascript
复制
docker buildx build --platform "linux/amd64,linux/arm64" --tag 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0 --push  . 

检查图像:

代码语言:javascript
复制
 docker buildx imagetools inspect 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0

显示:

代码语言:javascript
复制
Name:      1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:4221ad469d6a18abda617a0041fd7c87234ebb1a9f4ee952232a1287de73e12e
       
Manifests: 
    Name:      1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0@sha256:c1b0c04c84b025357052eb513427c8b22606445cbd2840d904613b56fa8283f3
    MediaType: application/vnd.docker.distribution.manifest.v2+json
    Platform:  linux/amd64
         
    Name:      1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0@sha256:828414cad2266836d9025e9a6af58d6bf3e6212e2095993070977909ee8aee4b
    MediaType: application/vnd.docker.distribution.manifest.v2+json
    Platform:  linux/arm64

然而,ECR将两个子图像显示为untagged

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-15 23:40:46

有几种方法可以标记映像,但它们都涉及使用所需的标记推送平台特定的清单。有了码头,你可以拉图像,保持它,并推动它,但不利的是,你将不得不拉每一层。

一个更快的选项是只使用注册表API调用传输清单json。你可以用卷发来做这件事,但是这个过程变得复杂了。有几种直接使用注册中心的工具,包括谷歌起重机、RedHat的skopeo和我自己的雷格。Regclient包含regctl命令,它将实现如下所示:

代码语言:javascript
复制
regctl image copy \
  1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0@sha256:c1b0c04c84b025357052eb513427c8b22606445cbd2840d904613b56fa8283f3 \
  1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0-linux-amd64

regctl image copy \
  1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0@sha256:828414cad2266836d9025e9a6af58d6bf3e6212e2095993070977909ee8aee4b \
  1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0-linux-arm64

您还可以对此编写自动修复脚本,列出注册表中的所有标记,为尚未拥有平台的标记提取清单列表,并运行映像副本以保留每个平台的清单。但是,在buildx推送映像之后,编写buildx作业脚本以包含regctl可能更容易,速度也更快。

注如果使用cred助手登录ECR,regctl可以与本地命令一起使用。如果希望将regctl作为容器运行,并且您专门使用的是ecr-login,请使用高寒版本的图像,因为它们包含帮助器二进制文件。

票数 2
EN

Stack Overflow用户

发布于 2021-11-10 20:13:20

我也遇到了同样的问题。到目前为止,我的解决方案似乎比其他一些建议容易一些,但我仍然不喜欢它。

在完成初始操作后:

代码语言:javascript
复制
docker buildx build --platform "linux/amd64,linux/arm64" --tag 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0 --push  . 

我的后续行动如下:

代码语言:javascript
复制
docker buildx build --platform "linux/amd64" --tag 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0-amd --push  .
docker buildx build --platform "linux/arm64" --tag 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0-arm --push  .

这使我能够同时构建多个平台的并行构建速度,并获得ECR中标记的图像。由于已经缓存了构建信息--它非常快,它似乎只是按一下标签,仅此而已。在一个测试中,我刚刚完成了第一个命令的构建时间为0.5秒。第二个花了0.7秒。

尽管如此,我并不热衷于这个解决方案,而是在寻找一个更好的解决方案时发现了这个问题。

票数 6
EN

Stack Overflow用户

发布于 2021-08-16 16:32:47

除了上面提到的关于使用regctl的内容外,如果您希望与ECR凭据助手一起使用它,下面是skopeo的命令。https://github.com/awslabs/amazon-ecr-credential-helper

代码语言:javascript
复制
skopeo copy \ 
docker://1234567890.dkr.ecr.us-west-2.amazonaws.com/stackoverflow@sha256:1badbc699ed4a1785295baa110a125b0cdee8d854312fe462d996452b41e7755 \
docker://1234567890.dkr.ecr.us-west-2.amazonaws.com/stackoverflow:1.0-linux-arm64

https://github.com/containers/skopeo

  • Paavan Mistry,AWS集装箱DA
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68790184

复制
相关文章

相似问题

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