【问题标题】:ECR lifecycle policyECR 生命周期策略
【发布时间】:2025-12-16 18:45:01
【问题描述】:

在我们的 ECR 中,每个微服务都有多个存储库。

服务 1

服务 2

服务 3

在构建代码(适用于任何服务)、从中创建图像并推送到 ECR 时,我们使用关键字 - devbuild-XXX-XXX-XXX- 对其进行标记XXX

如果我们再次执行此过程,新图像将被标记为如上,但上面的图像(现在是以前的)将仅标记为 build-XXX-XXX-XXX-XXX .

如何设置生命周期策略以仅删除那些仅标记为 build-XXX-XXX-XXX-XXX

的图像

我设置了以下策略,但在测试运行期间,我可以看到它还会拾取那些标记为 dev 我不想删除的图像。

dev 标记的图像将始终与 build-XXX-XXX-XXX-XXX

一起出现
{
  "rules": [
    {
      "action": {
        "type": "expire"
      },
      "selection": {
        "countType": "imageCountMoreThan",
        "countNumber": 5,
        "tagStatus": "tagged",
        "tagPrefixList": [
          "build"
        ]
      },
      "description": "remove images starting with build",
      "rulePriority": 1
    }
  ]
}

在同一个 repo 中,我还推送带有各自标签(testuat)的测试和 UAT 图像,使用上述过程(使用 build- XXX-XXX-XXX-XXX),也不想删除它们。

【问题讨论】:

  • dev 标签不能同时存在于两个图像上。我不确定你在这里问什么。
  • 明显的解决方案是更改您的标记约定,并用其他不包含“build”的单词标记“dev”构建
  • 嗨 Jordanm,是的,当然 dev 标签不能存在于两个图像上。如果我第一次构建图像​​ - 它将带有两个标签 - dev 和 build-XXX-XX 并且如果我再次构建第二个图像 - 现在这将被标记为 dev 和 build-YY-YYY 并且之前的图像只保留构建-XXX-XXX。希望澄清。

标签: amazon-web-services amazon-ecs docker-image amazon-ecr


【解决方案1】:

符合规则标记要求的图像不能 已被优先级较低的规则过期。

如果您想保留一个带有dev 标记的图像,您必须为此添加额外的规则,为该规则设置最高优先级(我在下面的示例中设置为 10)并降低您的build 标记规则的优先级(我设置了100),例如:

{
  "rules": [
    {
      "rulePriority": 10,
      "description": "Remove dev except one",
      "selection": {
        "tagStatus": "tagged",
        "tagPrefixList": [
          "dev"
        ]
        "countType": "imageCountMoreThan",
        "countNumber": 1
      },
      "action": {
        "type": "expire"
      }
    },
    {
      "rulePriority": 100,
      "description": "Remove images starting with build",
      "selection": {
        "countType": "imageCountMoreThan",
        "countNumber": 5,
        "tagStatus": "tagged",
        "tagPrefixList": [
          "build"
        ]
      },
      "action": {
        "type": "expire"
      }
    }
  ]
}

同样的方法为标签uattest添加不同优先级(例如20和30)但高于build的规则。

【讨论】: