←Back to Home
•docker

Watchtower的通知配置

Watchtower 自动更新很好用,但默认通知太吵。本文记录如何通过 Telegram HTML 模板与静默参数,实现“仅在有容器更新时”才推送精简聚合消息。

Watchtower 能自动更新容器,但默认通知体验极差:容器重启发一条、定时扫描没更新也发一条。

折腾了一圈,最终把它调校成理想的**“极简静默模式”**:

  • 启动不通知、没更新不通知。
  • 只有实际更新了镜像,才往 Telegram 推送一条排版清晰的聚合卡片。
  • 更新后自动清理旧镜像,不占磁盘。

预期通知效果

实际推送效果类似以下文本框:

🚀 Docker 更新完成
🖥 服务器: 你的服务器名称
📊 概览: 8 扫描 | 2 更新
📦 容器列表:
• watchtower (nickfedor/watchtower:latest)
• vaultwarden (vaultwarden/server:latest)

完整 Docker Compose 配置

services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
TZ: Asia/Shanghai
# Telegram 推送配置(注意替换 API 和 chats ID)
WATCHTOWER_NOTIFICATION_URL: "telegram://BOT_TOKEN@telegram?chats=CHAT_ID&parsemode=HTML"
WATCHTOWER_NOTIFICATION_REPORT: "true"
# 静默优化:关闭启动提示、隐藏默认标题、仅告警级别
WATCHTOWER_NOTIFICATION_SKIP_TITLE: "true"
WATCHTOWER_NO_STARTUP_MESSAGE: "true"
WATCHTOWER_NOTIFICATIONS_LEVEL: "warn"
# 聚合通知模板(仅在有 .Updated 时输出正文)
WATCHTOWER_NOTIFICATION_TEMPLATE: |
{{- if .Report -}}
{{- with .Report -}}
{{- if .Updated -}}
🚀 <b>Docker 更新完成</b>
🖥 服务器: 你的服务器名称
📊 概览: {{len .Scanned}} 扫描 | {{len .Updated}} 更新
📦 容器列表:
{{- range .Updated }}
• <code>{{ .Name }}</code> ({{ .ImageName }})
{{- end }}
{{- end -}}
{{- end -}}
{{- end -}}
# 每小时整点检查一次,并自动清理旧镜像
command: --schedule "0 0 * * * *" --cleanup