用 WUD 替代 Watchtower:构建可控的 Docker 自动更新方案
用 WUD 替代 Watchtower:构建可控的 Docker 自动更新方案
前言:为什么必须替换 Watchtower
Watchtower 官方已于 2025 年 12 月 17 日停止更新,并正式归档其 GitHub 仓库。
这意味着项目将:
- 不再有新功能
- 不再修复安全漏洞
- 代码仓库只读,仅供参考
虽然现有 Watchtower 实例仍然可以继续运行,但从长期运维角度看,继续依赖一个已归档的基础设施组件,本身就构成风险。
因此,社区开始推荐更活跃的替代方案,例如 Linuxiac 推荐的 WUD(What’s Up Docker),或由 Nicholas Fedor 维护的 Fork 版本。
本文只聚焦 WUD,并以”稳态替代 Watchtower”为目标,而不是盲目自动更新。
目标效果
- 用 WUD 替代 Watchtower
- 默认不自动更新任何容器
- 只对明确打标签的容器启用监控/自动更新
- 定时扫描(每 12 小时)
- 更新后自动清理旧镜像
- Web UI 仅作为辅助查看
0. 前置条件
验证:
docker --version
docker compose version
准备目录:
mkdir -p /opt/wud
cd /opt/wud
1. WUD 的 docker-compose 配置
创建 docker-compose-wud.yml:
# version: "3.8"
services:
wud:
image: getwud/wud:latest
container_name: wud
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./store:/store
environment:
- TZ=Asia/Shanghai
# 本机 Docker watcher
- WUD_WATCHER_LOCAL_SOCKET=/var/run/docker.sock
# 关键:默认不监控任何容器
- WUD_WATCHER_LOCAL_WATCHBYDEFAULT=false
# 每 12 小时扫描一次
- WUD_WATCHER_LOCAL_CRON=0 */12 * * *
# 自动更新 + 更新后清理旧镜像
- WUD_TRIGGER_DOCKER_AUTO_PRUNE=true
启动:
docker compose -f docker-compose-wud.yml up -d
确认日志:
docker logs -n 100 wud
正常情况下你会看到:
watchbydefault:false
trigger.docker.auto ... Registering for auto execution
Cron scheduled (0 */12 * * *)
Listening to docker events
2. Web UI(仅作辅助查看)
访问:
http://服务器IP:3000
默认匿名访问,仅用于辅助查看。
3. 核心设计:一切由标签决定
因为设置了:
WUD_WATCHER_LOCAL_WATCHBYDEFAULT=false
所以:
- 没有标签的容器 = 完全不受影响
- WUD 不会”误更新”任何服务
这是它优于 Watchtower 的关键点。
4. 两个最重要的标签规则
4.1 只监控(不自动更新)
labels:
- "wud.watch=true"
效果:只监控容器状态,不自动更新。
4.2 监控 + 自动更新(Watchtower 的等价替代)
labels:
- "wud.watch=true"
- "wud.trigger.include=docker.auto"
含义很明确:只有被点名的容器,才允许自动更新。
5. 示例:让一个 nginx 服务自动更新
services:
web:
image: nginx:latest
container_name: demo-nginx
restart: unless-stopped
ports:
- "8080:80"
labels:
- "wud.watch=true"
- "wud.trigger.include=docker.auto"
应用变更:
docker compose up -d
WUD 会自动发现,无需重启自身。
6. 清理旧镜像策略
已启用:
WUD_TRIGGER_DOCKER_AUTO_PRUNE=true
效果等同于:
watchtower --cleanup
只在更新发生后清理旧镜像。
长期运行环境,可额外偶尔执行:
docker image prune -f
7. 使用建议
wud.watch=true+wud.trigger.include=docker.auto= 监控并自动更新wud.watch=true= 仅监控,不自动更新
WUD 的正确用法不是”全自动”,而是”可控自动”。
8. 与 Watchtower 的对比
| 特性 | Watchtower | WUD |
|---|---|---|
| 默认行为 | 监控所有容器 | 不监控任何容器(除非明确标记) |
| 更新策略 | 全自动 | 可控(通过标签) |
| Web UI | 无 | 有 |
| 项目状态 | 已归档 | 活跃维护 |
| 配置灵活性 | 低 | 高 |
总结
WUD 是一个功能强大的 Docker 容器更新管理工具,作为已停止维护的 Watchtower 的理想替代品。通过设置 WATCHBYDEFAULT=false 和使用标签控制,您可以精确控制哪些容器需要自动更新,哪些只需要接收通知。这种”可控自动”的设计理念使您能够安全地管理各种类型的容器,确保系统安全的同时避免意外的数据丢失或服务中断。