8.7. 设置标签过期


可以使用标签过期功能,将镜像标签设置为在所选日期和时间从 Red Hat Quay 存储库 过期。这个功能包括以下特征:

  • 当镜像标签过期时,会从存储库中删除。如果它是特定镜像的最后一个标签,则镜像也会被删除。
  • 过期时间基于每个标签设置。它没有作为整个存储库设置。
  • 标签过期或删除后,它不会立即从 registry 中删除。这取决于 时间机器 功能中分配的时间,定义何时永久删除标签或垃圾收集的时间。默认情况下,这个值设置为 14 天,但管理员可以将此时间调整为多个选项之一。直到垃圾回收发生的时间点,可以恢复标签更改。

Red Hat Quay 超级用户没有与从用户存储库中删除已过期的镜像相关的特殊权限。超级用户没有收集信息并在用户存储库上执行的操作的中央机制。每个存储库的所有者是管理过期和删除其镜像的所有者。

标签过期时间可以通过三种方式之一设置:

  • 在创建镜像时,通过在 Dockerfile 中设置 quay.expires-after= 标签。这会将一个时间设置为在构建镜像时过期。该标签仅适用于镜像清单。
  • 在创建镜像时,通过在 Dockerfile 中设置 quay.expires-after= 注解标签。可以为镜像清单和镜像索引传递 --annotation
  • 通过在 Red Hat Quay UI 上选择过期日期。例如:

    Change tag expiration under the Options icon or from the EXPIRES column

设置标签过期可帮助自动清理旧的或未使用的标签,有助于减少存储空间。

8.7.1. 从存储库设置标签过期

流程

  1. 在 Red Hat Quay v2 UI 仪表板上,单击导航窗格中的 Repositories
  2. 单击具有镜像标签的存储库的名称。
  3. 点镜像菜单 kebab 并选择 Change expiration
  4. 可选。或者,您可以通过点多个标签框来批量添加过期日期,然后选择 Actions Set expiration
  5. Change Tags Expiration 窗口中,设置一个到期日期,指定星期几、月份、月份和年份。例如,2023 年 11 月 15 日星期三。或者,您可以点击日历按钮并手动选择日期。
  6. 设置时间,例如 2:30 PM
  7. 单击 Change Expiration 以确认日期和时间。返回以下通知:成功将 标签测试的过期时间设置为 2023 年 11 月 15 日,2:26 PM
  8. 在 Red Hat Quay v2 UI Tags 页面中,您可以看到标签设置为过期。例如:

    Red Hat Quay v2 UI tag expiration

8.7.2. 设置 Dockerfile 中的标签过期

您可以使用 docker label 命令将标签(例如 quay.expires-after=20h )添加到镜像标签中,以便标签在指示的时间后自动过期。接受小时、天或周的以下值:

  • 1h
  • 2d
  • 3w

过期时间从镜像推送到 registry 的时间开始。

流程

  • 输入以下 docker label 命令,为所需的镜像标签添加标签。标签的格式应为 quay.expires-after=20h,以指示该标签应当在 20 小时后过期。使用所需的过期时间替换 20h。例如:

    $ docker label quay.expires-after=20h quay-server.example.com/quayadmin/<image>:<tag>
    Copy to Clipboard Toggle word wrap

8.7.3. 使用注解设置标签过期

您可以在将镜像推送到 registry 时,将注解(如 quay.expires-after=20h )添加到镜像标签中。此注解会导致标签在指定时间后自动过期。该注解可同时应用到镜像清单和镜像索引。接受小时、天或周的以下值:

  • 1h
  • 2d
  • 3w

过期时间从镜像推送到 registry 的时间开始。

注意

使用 or- annotation 标志可以通过 oras CLI 工具最简单的。

先决条件

流程

  1. 输入以下 oras push --annotation 命令,将注解添加到所需的镜像标签。该注解应该采用 quay.expires-after=<value> 格式,以指示该标签应该使集合时间过期。例如:

    $ oras push --annotation quay.expires-after=<value> \
      <quay-server.example.com>/<organization>/<repository>:<tag> \
      <file_path>:<media_type>
    Copy to Clipboard Toggle word wrap

    输出示例

    ✓ Uploaded  hello.txt                                                                                                       12/12  B 100.00%  321ms
      └─ sha256:74b9e308133afb3bceae961097cb2aa481483869d695ce1414cd2bc7f046027c
    ✓ Uploaded  application/vnd.oci.empty.v1+json                                                                                 2/2  B 100.00%  328ms
      └─ sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
    ✓ Uploaded  application/vnd.oci.image.manifest.v1+json                                                                    620/620  B 100.00%     0s
      └─ sha256:c370e931b5eca44fd753bd92e6991ed3be70008e8df15078083359409111f8c3
    Pushed [registry] quay-server.example.com/fortestuser/busybox:test2
    ArtifactType: application/vnd.unknown.artifact.v1
    Copy to Clipboard Toggle word wrap

  2. 通过检查 Red Hat Quay UI 或输入以下命令来确认已应用了过期日期:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/tag/?specificTag=<tag>" \
    Copy to Clipboard Toggle word wrap

    输出示例

    {"tags": [{"name": "test2", "reversion": false, "start_ts": 1743706344, "end_ts": 1743778344, "manifest_digest": "sha256:c370e931b5eca44fd753bd92e6991ed3be70008e8df15078083359409111f8c3", "is_manifest_list": false, "size": 12, "last_modified": "Thu, 03 Apr 2025 18:52:24 -0000", "expiration": "Fri, 04 Apr 2025 14:52:24 -0000"}, {"name": "test2", "reversion": false, "start_ts": 1742493776, "end_ts": 1743706344, "manifest_digest": "sha256:d80aa3d7f5f5388cfae543b990d3cd3d47ff51c48ef29ff66102427bf7bc0a88", "is_manifest_list": false, "size": 2266046, "last_modified": "Thu, 20 Mar 2025 18:02:56 -0000", "expiration": "Thu, 03 Apr 2025 18:52:24 -0000"}], "page": 1, "has_additional": false}
    Copy to Clipboard Toggle word wrap

8.7.4. 使用注解删除标签过期

使用 oras CLI 工具,您可以取消设置之前建立的过期时间。

先决条件

流程

  1. 输入以下 oras push --annotation 命令删除所需镜像标签的注释。该注解的格式应为 quay.expires-after=never。例如:

    $ oras push --annotation quay.expires-after=never \
      <quay-server.example.com>/<organization>/<repository>:<tag> \
      <file_path>:<media_type>
    Copy to Clipboard Toggle word wrap

    输出示例

    ✓ Uploaded  hello.txt                                                                                                       12/12  B 100.00%  321ms
      └─ sha256:74b9e308133afb3bceae961097cb2aa481483869d695ce1414cd2bc7f046027c
    ✓ Uploaded  application/vnd.oci.empty.v1+json                                                                                 2/2  B 100.00%  328ms
      └─ sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
    ✓ Uploaded  application/vnd.oci.image.manifest.v1+json                                                                    620/620  B 100.00%     0s
      └─ sha256:c370e931b5eca44fd753bd92e6991ed3be70008e8df15078083359409111f8c3
    Pushed [registry] quay-server.example.com/fortestuser/busybox:test2
    ArtifactType: application/vnd.unknown.artifact.v1
    Copy to Clipboard Toggle word wrap

  2. 最新清单将不再有过期时间。通过检查 Red Hat Quay UI 或输入以下命令来确认已删除过期日期:

    {"tags": [{"name": "test2", "reversion": false, "start_ts": 1743708135, "manifest_digest": "sha256:19e3a3501b4125cce9cb6bb26ac9207c325259bef94dc66490b999f93c4c83a9", "is_manifest_list": false, "size": 12, "last_modified": "Thu, 03 Apr 2025 19:22:15 -0000"}, {"name": "test2", "reversion": false, "start_ts": 1743706344, "end_ts": 1743708135}]}
    Copy to Clipboard Toggle word wrap

    请注意,没有列出过期时间。

8.7.5. 使用 API 设置标签过期

可以使用 API 将镜像标签设置为过期。

先决条件

  • 您已创建了 OAuth 访问令牌
  • 您已在 config.yaml 文件中设置了 BROWSER_API_CALLS_XHR_ONLY: false

流程

  • 您可以使用 PUT /api/v1/repository/{repository}/tag/{tag} 命令并传递 expiration 字段来设置标签过期:

    $ curl -X PUT \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      --data '{
        "manifest_digest": "<manifest_digest>"
      }' \
      https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/tag/<tag>
    Copy to Clipboard Toggle word wrap

    输出示例

    "Updated"
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat