自动更新与版本管理

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
这篇教程对你有帮助吗?