Watchtower:历史用法与停维后的迁移注意

Watchtower 监控运行中容器的镜像仓库,新版本推送后自动拉取并以相同配置重建容器。原项目已归档停维。本文解释历史用法、权限风险与存量迁移,不建议新增生产部署。

最佳实践
容器模块与编排港口插画

直接回答:Watchtower 是容器更新自动化工具——周期性检查运行中容器的镜像有没有新版本,有则拉取并按原配置(端口/卷/环境变量)重建容器。支持白名单监控特定容器、monitor-only 仅通知模式(邮件/Slack 提醒人工介入),自更新自身也在覆盖范围。

维护状态:官方仓库于 2025-12-17 归档,并明确说明项目不再维护;官方也不推荐商业或生产使用。以下仅解释存量配置,不是安装推荐。优先迁移到有维护责任、审批、健康验证和回滚机制的发布流程。

工作方式

Watchtower 盯着运行容器所用镜像的仓库标签:新 digest 出现 → 拉取 → 优雅停旧容器 → 同配置起新容器 → 若启用 cleanup 再清理旧镜像。

部署

docker run -d   --name watchtower   -v /var/run/docker.sock:/var/run/docker.sock   containrrr/watchtower:1.7.1 --monitor-only --run-once web

Compose 版本:

services:
  watchtower:
    image: containrrr/watchtower:1.7.1
    volumes: ["/var/run/docker.sock:/var/run/docker.sock"]
    environment:
      WATCHTOWER_POLL_INTERVAL: 3600        # 每小时检查
      WATCHTOWER_MONITOR_ONLY: "true"        # 存量配置仅检查,不重建
      WATCHTOWER_CLEANUP: "false"           # 不自动删除回退镜像

精细化控制

# 只管指定容器
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower:1.7.1 --monitor-only --run-once web

# 仅监控不更新(通知模式)
WATCHTOWER_MONITOR_ONLY=true
WATCHTOWER_NOTIFICATIONS=slack    # 或 shoutrrr 系 webhook

容器侧用 label com.centurylinklabs.watchtower.enable=false 把关键服务排除在自动更新外。

示例固定历史版本,不代表该版本仍安全或与当前 Engine API 兼容。socket 授权近似宿主 root;只读挂载也不限制 API 操作。monitor-only 不重建容器,但仍可能拉取镜像;通知须另配有效通知渠道和凭证。

存量迁移注意

  • 有状态服务别开自动更新(数据库!)——monitor-only 人工窗口升级
  • 配 healthcheck:新容器健康检查失败时人工介入的依据
  • 更新窗口与频率节制:凌晨低峰、每小时级轮询够用
  • 卷保留不等于升级无损;数据库格式迁移可能不可逆,须有一致性备份和恢复演练

迁移或更新镜像后,保留旧版本号和变更时间,再检查健康请求及应用错误。已有观测云日志采集时,可将版本写入结构化日志并通过 DataKit采集,按变更前后相同窗口核对失败记录;是否回退仍需结合业务验证和数据兼容性判断。

常见问题(FAQ)

Q:更新失败会回滚吗?
A:Watchtower 无自动回滚——新容器起不来就停在那。关键服务用 monitor-only 或配合健康检查+人工流程。

Q:和 CI/CD 推送部署冲突吗?
A:Watchtower 适合"跟踪上游镜像"(如 nginx、第三方服务);自家应用的发布走 CI/CD 显式部署,别混用。

Q:私有仓库支持吗?
A:支持——挂载 Docker config(含认证)进 Watchtower 容器即可拉私有镜像。

官方参考

本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台