自动更新与版本管理
Watchtower 自动拉取最新版 —— 不用手动管
更新不该是个体力活
OpenClaw 在不断迭代,新功能、性能优化、安全修复都在新版本里。手动更新?每次都要 SSH 上去、拉镜像、重启服务 —— 太烦了,而且容易忘。
Watchtower 可以帮你自动监控镜像更新,有新版本就自动拉取并重启容器。设好之后基本不用管了。
四步搞定自动更新
1
安装 Watchtower
Watchtower 本身也是一个 Docker 容器,加到你的 docker-compose.yml 里就行。它会定时检查你跑的容器有没有新版镜像。
2
配置通知
更新了总得知道一下吧。Watchtower 支持邮件、Slack、钉钉等通知方式,更新成功或失败都能收到消息。
3
设置更新策略
不是所有更新都要马上装。可以设置检查间隔(比如每天一次)、指定只更新某些容器、或者只通知不自动更新。
4
准备回滚方案
万一新版本有 bug 呢?提前知道怎么回滚到上个版本,心里有底才敢开自动更新。
Watchtower 配置
把 Watchtower 加到你的 docker-compose.yml 里:
docker-compose.yml — 加入 Watchtower
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: always
ports:
- "3000:3000"
volumes:
- ./data:/app/data
- ./config:/app/config
labels:
- "com.centurylinklabs.watchtower.enable=true"
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
# 每天凌晨 4 点检查更新
- WATCHTOWER_SCHEDULE=0 0 4 * * *
# 更新后清理旧镜像
- WATCHTOWER_CLEANUP=true
# 只更新有 label 标记的容器
- WATCHTOWER_LABEL_ENABLE=true
# 更新前先拉取新镜像
- WATCHTOWER_INCLUDE_RESTARTING=true
# 通知配置(可选)
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@example.com
- WATCHTOWER_NOTIFICATION_EMAIL_TO=your-email@example.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=watchtower@example.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-password
启动 Watchtower
启动并验证
# 启动所有服务(包括 Watchtower)
docker compose up -d
# 查看 Watchtower 日志
docker logs watchtower
# 手动触发一次检查(测试用)
docker exec watchtower /watchtower --run-once
# 查看 Watchtower 监控了哪些容器
docker logs watchtower 2>&1 | grep "Watching"
生产环境建议先在测试环境验证再更新。自动更新虽然方便,但新版本可能有 breaking changes。稳妥的做法是:Watchtower 只设成"通知模式"(
WATCHTOWER_MONITOR_ONLY=true),收到通知后先在测试环境跑一下,没问题了再手动更新生产环境。
手动回滚
自动更新出了问题?别慌,Docker 回滚很简单:
回滚到上个版本
# 1. 停止当前容器
docker compose down
# 2. 查看本地有哪些版本的镜像
docker images openclaw/openclaw
# 3. 指定旧版本启动
# 修改 docker-compose.yml 中的 image 标签
# image: openclaw/openclaw:v1.9 (换成你要回滚到的版本)
# 或者直接用 docker run 指定版本
docker run -d --name openclaw \
-p 3000:3000 \
-v ./data:/app/data \
-v ./config:/app/config \
openclaw/openclaw:v1.9
# 4. 确认回滚成功
docker ps
curl -s http://localhost:3000/health
# 5. 临时禁用 Watchtower 自动更新(防止又被更新回去)
docker stop watchtower
版本锁定策略
不想用 latest 标签冒险?可以锁定到具体版本:
版本锁定示例
# 方案 1:锁定主版本号(推荐)
# 只接收小版本更新(bug 修复),不会有 breaking changes
image: openclaw/openclaw:v2
# 方案 2:锁定到具体版本
# 完全不会自动更新,手动控制每次升级
image: openclaw/openclaw:v2.1.3
# 方案 3:用 latest(激进)
# 总是最新版,配合 Watchtower 自动更新
image: openclaw/openclaw:latest