Docker镜像仓库Webhook通知本质是仓库在构建完成时主动向指定URL发送HTTP请求,实现比轮询更及时的结果推送;阿里云ACR、腾讯云TCR支持构建事件,Docker Hub已弃用该功能,Harbor需依赖CI工具触发;可用almir/webhook快速搭建接收端,并对接钉钉、企业微信或Slack等通知渠道。

通过 Docker 镜像仓库的 Webhook 实现镜像构建通知,本质是让仓库在构建完成(成功或失败)时,主动向你指定的服务地址发送 HTTP 请求,把构建结果实时推给你。这比轮询日志或等邮件更及时,也更适合接入钉钉、企业微信、Slack 等内部通讯工具。
确认你的镜像仓库是否支持构建事件 Webhook
不是所有平台都原生支持“构建完成”这类事件的通知,需按平台区分:
-
阿里云 ACR:完全支持。在“构建规则”页面启用后,可配置触发事件为
Build Success或Build Failure,并填写目标 URL。 - 腾讯云 TCR:支持构建结果通知,控制台中进入“事件通知” → 新建规则 → 选择事件类型为“镜像构建完成”,再设置接收地址和过滤条件(如特定命名空间/仓库名)。
- Docker Hub:已弃用 Automated Builds 功能,不再提供构建事件 Webhook;仅保留基础的 push 事件通知,无法获知构建过程状态。
- Harbor:自身不直接触发构建,但若你用 Jenkins 或 GitLab CI 触发构建,可让 CI 工具在构建结束后调用 Harbor API 或自定义 Webhook 地址来通知结果。
配置 Webhook 接收端(轻量级方案)
你不需要自己写完整服务,可用现成工具快速落地:
- 用
almir/webhook镜像启动一个接收服务:
docker run -d -p 9000:9000 -v $(pwd)/hooks.json:/etc/webhook/hooks.json almir/webhook -hooks=/etc/webhook/hooks.json -verbose - 在
hooks.json中定义处理逻辑,例如匹配构建成功事件并转发到钉钉:
{"id": "acr-build-success", "execute-command": "/bin/sh", "command-working-directory": "/tmp", "response-message": "已收到构建成功通知"} - 确保 Webhook URL 是公网可访问的(如用内网部署,需配合内网穿透或反向代理)。
解析构建事件中的关键字段
不同平台推送的 JSON 结构略有差异,但通常包含以下核心信息,可用于判断状态和生成通知:
-
status 或 build_status:值为
success、failed、cancelled -
repository.name:镜像仓库名(如
myapp) -
image 或 digest:生成的镜像标签或摘要(如
latest、sha256:abc123...) -
trigger:触发方式(如
git-push、manual) - build_id 和 start_time:便于追踪和超时判断
对接常用通知渠道(免开发)
多数通知平台接受标准 JSON POST,只需把 Webhook URL 换成对应入口即可:
-
钉钉机器人:URL 形如
https://oapi.dingtalk.com/robot/send?access_token=xxx,注意请求头加Content-Type: application/json,body 用钉钉格式封装消息。 -
企业微信机器人:URL 为
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx,同样需按其文档组织 JSON 内容(支持文本、markdown、卡片)。 -
Slack Incoming Webhook:直接填 Slack 提供的
https://hooks.slack.com/services/...地址,payload 使用 Slack Block Kit 格式更美观。











