在 AWS ECR 上重新标记映像会创建新映像

2023-11-23

我在 AWS ECR 上有一个私有 Docker 存储库。

我正在尝试按照此处的说明使用新标签来标记现有图像https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-retag.html

例如,假设我有一个带有标签“1.5.0”的图像,现在我想添加标签“lts”,通过使用上面的方法来“batch-get-image”标签“1.5.0”,并且然后“put-image”和“image-tag”“lts”,该命令在存储库中创建一个带有标签“lts”的全新图像。原始图像“1.5.0”不受影响。

Code:

MANIFEST=$(aws ecr batch-get-image --region eu-west-1 --repository-name mynamespace/repo --image-ids imageTag='1.5.0' --query 'images[].imageManifest' --output text)
aws ecr put-image --region eu-west-1 --repository-name mynamespace/repo --image-tag lts --image-manifest "$MANIFEST"

上面的结果是两个独立的图像:

  • lts
  • 1.5.0

我想要 1 张图片:

  • 1.5.0,lts

有什么想法我做错了吗?存储库设置已禁用不变性。

我宁愿避免docker pull, docker tag, docker push方法,因为这将在我的 CI 服务器(Github Actions)上以单独的工作流程运行,其中docker pull将是一个非常浪费的命令。


问题是清单中的空白。

--output text将引入空白,不会产生与原始图像相同的 sha,因此它将发布新图像。

所以你想使用jq as so:

MANIFEST=$(aws ecr batch-get-image --repository-name amazonlinux --image-ids imageTag=latest --output json | jq --raw-output '.images[].imageManifest')

(如此处所述)如何在 ECR 中重新标记图像?

无论您使用哪种语言,都必须管理空白。对我来说,要在 ruby​​ 中管理它,对我有用的是将其解析为 json。

另外,我学到的一件事是,您可以通过指定您期望的 sha 来防止自己无意中创建新图像。在下面的代码中,我

  • 按标签查找图像并抓取imageDigest sha,
  • 使用该 sha 获取清单
  • 通过摘要shaand清单到put-image command

如果清单的 sha 与您提供的摘要 sha 不匹配,亚马逊将返回错误,从而允许命令失败,而不是创建您不需要的附加图像。

digest = `aws ecr batch-get-image --repository-name #{name} --image-ids=imageTag=#{tag} --output json | jq --raw-output '.images[0].imageId.imageDigest'`.strip

pre_manifest = `aws ecr batch-get-image --repository-name #{name} --image-ids=imageDigest=#{digest} --output json | jq '.images[0].imageManifest'`

manifest = JSON.parse(pre_manifest)

# run_command is a wrapper around a system call

run_command("aws ecr put-image --repository-name #{name} --image-tag latest --image-digest #{digest} --image-manifest '#{manifest}'")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AWS ECR 上重新标记映像会创建新映像 的相关文章

随机推荐

  • 写入现有 Excel 文件

    package jexcel jxl nimit import java awt Label import java io File import java io IOException import jxl Cell import jxl
  • 删除数据表中的主键

    有没有办法从数据表中删除主键或者有没有办法先删除 PK 的约束 然后删除列本身 Thanks UPDATED dtTable Columns Add new System Data DataColumn PRIMARY KEY typeof
  • 通过伪经典实例化掌握原型继承(JavaScript)

    我正在尝试通过 JavaScript 使用继承来通过测试套件 下面是我到目前为止的代码片段 var Infant function this age 0 this color pink this food milk Infant proto
  • 将双精度型转换为 int

    转换的最佳方法是什么double to an int 应该使用演员阵容吗 如果您想要默认的向零截断行为 则可以使用强制转换 或者 您可能想使用Math Ceiling Math Round Math Floor等等 尽管之后你仍然需要演员阵
  • 将字符串转换为日期时间(使用 SSIS)

    我想将值 5 27 2013 16 42 37 490000 从平面文件 DT STR 读取 插入到 SQL Server 表的列 日期时间 中 如果我尝试在派生列中使用 DT DBDATE 或 DT DBTIMESTAMP 对其进行强制转
  • 忽略 Xcode4 中的“属性不可用”警告

    我在工具栏项中使用了很多 自定义标识符 这在 Xcode4 中很好 但在构建项目时它给了我一堆警告 属性不可用 Interface Builder 3 2 之前版本中的自定义标识符 有没有办法在Xcode4中忽略这些警告 当我搜索 真正的
  • Chart.js 中饼图的点击事件

    我有一个关于 Chart js 的问题 我使用提供的文档绘制了多个饼图 我想知道单击其中一个图表的某个切片是否可以根据该切片的值进行 ajax 调用 例如 如果这是我的data var data value 300 color F7464A
  • 学习MFC编程的先决条件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我懂一点 C 和 C 我现在正在处理的项目是大量的 MFC 编程 有经验的人可以告诉我学习MFC的前提条件吗 另外 什么是最好的学习来源 有什么特别
  • 堆插入的 O(1) 平均情况复杂度的论证

    索赔要求二进制堆的维基百科页面插入是 O logn 在最坏的情况下 但平均 O 1 所需的操作数量仅取决于新元素必须上升到满足堆性质的层数 因此插入操作的最坏情况时间复杂度为 O logn 但平均情况复杂度为 O 1 The 链接页面试图证
  • 基数树/patricia trie 中的前缀搜索

    我目前正在实现一个基数树 帕特里夏特里 无论你想怎么称呼它 我想用它在功能严重不足的硬件上的字典中进行前缀搜索 它应该或多或少像自动完成一样工作 即 e 显示与键入的前缀匹配的单词列表 我的实现是基于关于这篇文章 但其中的代码不包括前缀搜索
  • kotlin合约的目的是什么

    正在阅读 apply 函数代码源并发现 contract callsInPlace block InvocationKind EXACTLY ONCE 并且合约有一个空体 实验性的 ContractsDsl ExperimentalCont
  • “_csv.writer”对象没有属性“write”

    我不确定这里出了什么问题 我有一个想要过滤的 csv 文件 我想删除以 开头的所有行以及第三列是字符串 chrM 的所有行 我基本上将我的代码设置为类似于这里的答案 类型错误 需要一个字符缓冲区对象 但我收到错误 import re imp
  • 为 NSNotificationCenter = Swift deinit() 调用 .removeObserver 的正确位置?

    我读过很多关于为 NSNotificationCenter 调用 removeObserver 的正确位置的建议 因为 viewDidUnload 不是一个选项 我只是想知道 Swift 中新的 deinit 是否是一个不错的选择 nick
  • 如何阅读 ex_intro 的定义?

    我正在阅读Mike Nahas 的 Coq 入门教程 其中说 ex intro 的参数是 谓词 证人 与证人一起提出的谓词的证明 我在看定义 Inductive ex A Type P A gt Prop Prop ex intro for
  • Pandas 群体中的独特价值

    我有一个数据框 需要对其进行分组 然后进行分组 我需要从子组中返回子组是什么以及列的唯一值 df pandas DataFrame country pandas Series US Canada US US gender pandas Se
  • 使用 MongoDB 的简单投票系统

    快速问题我在 mongodb 中有一个文章列表 我希望用户能够对文章投赞成票或反对票 我的第一种方法是在文章集中有两行 分别称为 赞成票 和 反对票 它们的数字如下 点赞数 360 否决票 102 那么我需要通过求和来订购 赞成票 反对票这
  • JSON 中可以使用注释吗?

    我可以在 a 中使用注释吗JSON文件 如果是这样 怎么办 No JSON 是纯数据的 如果您包含评论 那么它也必须是数据 您可以有一个名为的指定数据元素 comment 或其他内容 应被使用 JSON 数据的应用程序忽略 您可能最好在生成
  • 使用通用迭代器访问数组数组的元素

    Is it 未定义的行为在 C 中访问相邻数组中的元素 如以下代码所示 include
  • Shiny 的 tabsetPanel 未在多个选项卡中显示绘图

    我正在尝试使用多个tabPanel控制范围内的tabsetPanel in Shiny 假设我使用以下代码从一个选项卡开始 mainPanel tabsetPanel tabPanel Plot plotOutput distPlot 代码
  • 在 AWS ECR 上重新标记映像会创建新映像

    我在 AWS ECR 上有一个私有 Docker 存储库 我正在尝试按照此处的说明使用新标签来标记现有图像https docs aws amazon com AmazonECR latest userguide image retag ht