一、操作场景
镜像预热通过 TCR 现有的触发器机制实现,适用于以下场景:
·推送即预热:向实例推送镜像后,满足触发规则的推送会自动发起 AGS 镜像预热调用,无需人工操作。
·按命名空间配置预热策略:每条规则必须选定一个命名空间,命名空间下的仓库可精确指定,也可使用正则表达式匹配。
·系统托管触发器:触发器类型选择 Agent 沙箱镜像预热,无需填写 URL 和 Header,也无需引入独立的触发服务。
注意:说明:
注意:TCR 仅记录并展示预热接口的调用结果(成功或失败),不同步预热任务状态。任务状态请在 Agent 沙箱的 加速中心 > 镜像预热页面查询。
二、前提条件
在配置 Agent 沙箱镜像预热前,你需要完成以下准备工作:
·实例版本与功能开通:该功能处于灰度发布阶段,相关 TCR 实例需提交工单升级后方可使用。Agent 沙箱镜像预热触发器类型仅对白名单用户可见。
·CAM 授权:预热动作依赖服务角色 TCR_QCSRole 绑定预设策略 QcloudAccessForAgsRoleInTCR,以授权调用 CreatePreCacheImageTask 等接口。首次提交配置时,控制台会自动弹出授权窗口;如子账号无 CAM 授权权限,需联系主账号完成授权。
·地域要求:预热目标地域为 AGS 所在地域。TCR 实例与 AGS 需保持同地域,不支持跨地域预热。
·命名空间:目标 TCR 实例中已创建至少一个命名空间,预热规则以命名空间为维度配置。
五、步骤1:进入触发器页面
1. 登录 容器镜像服务控制台,进入目标实例详情页。
2. 在左侧导航栏选择触发器。
六、步骤2:新建触发器
单击新建触发器,按以下参数填写配置:
| 配置项 | 必填 | 说明 |
| 名称 | 是 | 支持小写字母、数字及 -、.、_,以字母或数字开头。 |
| 描述 | 否 | 触发器用途备注。 |
| 触发器类型 | 是 | 选择 Agent 沙箱镜像预热,仅对白名单用户可见。 |
| 触发动作 | – | 固定为推送镜像,不可修改。 |
| 命名空间 | 是 | 预热策略的作用维度,必须选定一个命名空间。 |
| 仓库名称 | 否 | 正则表达式,需包含命名空间前缀,格式如 namespace/repo;留空表示命名空间内全部仓库。 |
| 版本 Tag | 否 | 正则表达式;留空表示全部版本。 |
| 预热目标地域 | 是 | AGS 所在地域,需与 TCR 实例保持同地域。 |
仓库名称和版本 Tag 的填写方式请参考下文 配置仓库名称与版本 Tag 匹配规则。
七、步骤3:完成授权并提交配置
单击确认提交配置:
·若 TCR_QCSRole 尚未绑定预设策略,将弹出 CAM 授权窗口,请按提示完成授权。该操作需由主账号或具备 CAM 权限的子账号确认。
·授权失败时,提交会被阻止,避免创建无法成功调用预热接口的规则。
八、配置仓库名称与版本 Tag 匹配规则
触发规则中的仓库名称和版本 Tag 使用正则表达式匹配:
·仓库名称匹配的是完整路径,即 命名空间/仓库,可包含多级路径,因此需要带命名空间前缀。
·匹配采用非锚定的子串匹配方式。需要精确限定时,请使用 ^ 和 $ 锚定。
·. 表示任意字符。匹配字面量点号(如版本号分隔符)时,需转义为 \\.。
以下写法均已在 TCR 实例上实测验证,以命名空间 demo 为例:
| 场景 | 仓库名称填写 | 版本 Tag 填写 |
| 命名空间内全部仓库 | 留空(控制台自动按 .* 处理) | 留空 |
| 以 path 为名称前缀的所有一级仓库 | ^demo/path[^/]*$ | 留空 |
| 以 path1、path2 为名称前缀的所有一级仓库 | ^demo/(path1|path2)[^/]*$ | 留空 |
| path1、path2 目录下的所有仓库 | ^demo/(path1|path2)/.+ | 留空 |
| 以 path1、path2 为名称前缀的所有仓库(任意层级) | ^demo/(path1|path2) | 留空 |
| 仓库内所有 1.x 版本 Tag | demo/tagtest | ^1\\. |
| 以 env1、env2 为名称前缀的版本 Tag | demo/tagtest | ^(env1|env2) |
注意:*、**、?、{a,b} 在此不是通配符语法,请勿直接套用同步规则或版本保留规则的通配符写法。
十、步骤1:推送镜像触发预热
配置完成后,使用 docker push 向实例推送镜像。任何满足触发规则的镜像推送都会自动发起预热调用,无需人工操作。
十一、步骤2:查看触发日志
在控制台的触发器页面,单击对应触发器行的触发日志,查看每次推送的调用记录与结果。
注意:说明:
注意:触发日志中的调用结果仅代表预热任务发起是否成功,不代表预热任务已完成。
十二、步骤3:查询 AGS 预热任务状态
预热任务状态请在 AGS 侧查询。你可前往 API Explorer,调用 DescribePreCacheImageTask 接口查看任务状态。
十三、通过云 API 配置触发器
除控制台外,你也可通过云 API 创建、查询或修改镜像预热触发器,并查询触发日志。
十四、创建镜像预热触发器
调用 CreateWebhookTrigger 接口,请求参数示例如下:
{ "RegistryId": "tcr-ejwv1234", "Namespace": "nginx-test", "Product": "ags", "PreheatRegion": "ap-guangzhou", "Trigger": { "Name": "preheat-demo", "Targets": [], "EventTypes": ["pushImage"], "Condition": ".*", "Enabled": true, "Description": "Agent 沙箱镜像预热示例" }}
十五、查询触发器列表
调用 DescribeWebhookTrigger 接口,请求参数示例如下:
{ "RegistryId": "tcr-ejwv1234", "Product": "ags", "Limit": 20, "Offset": 1}
十六、查询触发日志
调用 DescribeWebhookTriggerLog 接口,请求参数示例如下:
{ "RegistryId": "tcr-ejwv1234", "Namespace": "nginx-test", "Id": 38, "Limit": 20, "Offset": 1}
十七、修改触发器
调用 ModifyWebhookTrigger 接口,请求参数示例如下:
{ "RegistryId": "tcr-ejwv1234", "Namespace": "nginx-test", "Product": "ags", "PreheatRegion": "ap-shanghai", "Trigger": { "Id": 38, "Name": "preheat-demo", "Targets": [], "EventTypes": ["pushImage"], "Condition": ".*", "Enabled": true }}
注意:说明:
注意:上述请求中的实例 ID、命名空间、触发器 ID 和地域均为示例值,请替换为实际配置。创建和修改触发器时,PreheatRegion 均需与目标 TCR 实例保持同地域。
十八、关键参数说明
| 接口 | 参数 | 说明 |
| CreateWebhookTrigger | Product | 必须为 "ags",标识系统托管预热触发器;不传会被当作普通 webhook,并要求 Targets 非空。 |
| CreateWebhookTrigger | PreheatRegion | AGS 预热目标地域,Product=ags 时必填。 |
| CreateWebhookTrigger | Trigger.Targets | AGS 固定为空数组 []。 |
| CreateWebhookTrigger | Trigger.EventTypes | 固定为 ["pushImage"]。 |
| CreateWebhookTrigger | Trigger.Condition | 格式为 repo正则:tag正则,如 .* 匹配全部、nginx:.* 匹配 nginx 全部 Tag。 |
| DescribeWebhookTrigger | Product | 传入 "ags" 只查询预热触发器;省略则查询全部触发器。 |
| DescribeWebhookTrigger | Limit / Offset | 分页参数,Limit 为每页数量,Offset 为页码。 |
| DescribeWebhookTrigger | 返回 Response.Triggers | 数组,元素包含 Id、Name、Condition、Product、PreheatRegion 等字段。 |
| DescribeWebhookTriggerLog | Id | 触发器的 Trigger.Id,必填。 |
| DescribeWebhookTriggerLog | Limit / Offset | 分页参数,Limit 为每页数量,Offset 为页码。 |
| DescribeWebhookTriggerLog | 返回 Response.Logs[].Status | TCR 触发调用状态:running、finished、error、stopped。 |
| ModifyWebhookTrigger | Trigger.Id | 必填,表示要修改的触发器 ID。 |
| ModifyWebhookTrigger | 部分更新 | Trigger 中其余字段(Name、Targets、Condition、Description)可省略,省略则保留原值。 |
| ModifyWebhookTrigger | PreheatRegion | 省略时保留已持久化的地域。 |
20、常见问题与排查
| 现象 | 原因与处理 |
| 新建触发器时没有 Agent 沙箱镜像预热类型 | 功能白名单未开通,请联系腾讯云支持。 |
| 提交时提示 CAM 授权失败 | TCR_QCSRole 未绑定 QcloudAccessForAgsRoleInTCR 预设策略。请由主账号或有 CAM 权限的子账号在弹窗中完成授权,或在 CAM 控制台手动为 TCR_QCSRole 绑定该策略。 |
| 触发日志报 ResourceNotFound.Image | 预热调用已到达 AGS,但镜像不在 AGS 可预热的镜像目录中。请确认镜像存在于该地域,以及目标地域选择正确。 |
| 推送后没有触发记录 | 检查触发规则正则是否匹配,重点检查 ^、$ 锚定与 \\. 转义;确认发生的是推送镜像事件,删除或拉取不会触发预热;确认触发器未被禁用。 |
| 触发日志中查不到任务进度 | TCR 仅展示调用结果,不同步任务状态。请在 Agent 沙箱的加速中心 -> 镜像预热 页面查询任务状态。 |