watchtower可自动监控并更新nginx容器,保留原有配置;通过命名容器、指定监控目标、定时调度(--interval或--schedule)、清理旧镜像(--cleanup)及标签控制(如--label com.centurylinklabs.watchtower.enable=false)实现安全可控的无人值守升级。

直接用 Watchtower 监控 Nginx 容器,就能在官方镜像更新时自动拉取新版本并重启服务,整个过程保留原有配置(端口、卷、环境变量等),无需手动操作。
基础部署:启动 Nginx 并启用 Watchtower 监控
先运行一个标准 Nginx 容器:
- 使用命名容器便于后续指定监控:
docker run -d --name nginx-web -p 80:80 -v /path/to/html:/usr/share/nginx/html:ro nginx:alpine - 再启动 Watchtower,只盯这个容器:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower nginx-web
这样 Watchtower 就不会干扰其他容器,也避免误更新关键服务。
控制更新节奏:用 --interval 或 --schedule 精准调度
默认每 24 小时检查一次,但你可以按需调整:
- 高频检查(如开发环境):
--interval 300表示每 5 分钟查一次 - 低峰时段更新(推荐生产类场景):
--schedule "0 0 3 * * *"表示每天凌晨 3 点执行(注意:Watchtower 的 cron 是 6 字段,含秒,格式为 秒 分 时 日 月 周) - 若只想定时检查但不立即更新,可加
--no-pull配合脚本做二次判断(进阶用法)
保障安全与清理:加参数防磁盘爆满
长期运行容易积压旧镜像,建议加上两个实用参数:
-
--cleanup:更新成功后自动删掉旧镜像,省空间 -
--include-restart-exited:确保已退出但未被清除的旧容器实例也被纳入清理范围 - 如果 Nginx 挂载了自定义配置,确认
/etc/nginx/conf.d/或/usr/share/nginx/html是通过-v挂载的——Watchtower 不会动宿主机上的卷,配置始终安全
进阶提示:跳过特定标签或临时禁用
某些情况下你可能想让某个 Nginx 实例“静默”:
- 启动 Nginx 时加标签:
--label com.centurylinklabs.watchtower.enable=false,Watchtower 会自动跳过它 - 或者统一用标签筛选:
watchtower --label-enable --label-filter com.myapp=nginx-prod,只更新打了对应标签的容器 - 更新前可加
--debug查看日志细节,确认是否真拉到了新版(比如从nginx:1.25.4-alpine升到1.25.5-alpine)











