使用 Watchtower 自动更新 Docker 容器

简介

Watchtower 是一款自由开源的应用,是基于容器的解决方案,用于自动化 Docker 容器基础镜像更新,借助 watchtower,您只需将新镜像推送到 Docker Hub 或您自己的镜像注册表,即可更新容器化应用程序的运行版本。Watchtower 将拉取你的新镜像,优雅地关闭你现有的容器,并使用最初部署时使用的相同选项重新启动它
简单说就是 Watchtower 可以自动监控运行中的 Docker 容器,并且当它发现仓库有新版本镜像时,可以自动的下载新镜像然后以最初部署时使用的参数和设置重新部署容器,这一切都在后台自动进行,无需要用户的介入

部署

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \

这种模式下,默认每5分钟对所有容器自动检测一次镜像文件是否有发布更新,如果有新的镜像发布,就自动对容器进行更新

监控指定容器

如果只想对指定的容器进行监控更新,只需在后面加上容器名称,多个容器之间用空格隔开,以nginxqbittorrent为例,假如只想监控更新这两个容器,那么上面的代码改为:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  nginx qBittorrent

旧镜像清理

加入 WATCHTOWER_CLEANUP 环境变量,默认值为 false 添加此变量后,Watchtower 将在使用新镜像重新启动容器后删除旧镜像。可防止在更新容器时在系统上累积未使用的镜像,示例:

docker run -d \
  --name watchtower \
  -e WATCHTOWER_CLEANUP=false \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \

调整轮询间隔

添加 WATCHTOWER_POLL_INTERVAL 环境变量,默认值 86400 (24小时), Watchtower 默认每 5 分钟执行一次,添加此变量后,Watchtower 就会每 24 小时执行一次,示例:

docker run -d \
  --name watchtower \
  -e WATCHTOWER_POLL_INTERVAL=86400 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \

定时轮询

添加 WATCHTOWER_SCHEDULE 环境变量,值可使用Cron表达式,6 个字段(而不是传统的 5 个),由于容器内默认为 UTC 时间,国内用户使用可以通过添加 TZ=Asia/Shanghai 环境变量来定义时区,以每天上午4点示例:

docker run -d \
  --name watchtower \
  -e TZ=Asia/Shanghai \
  -e WATCHTOWER_SCHEDULE=0 0 4 * * * \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \

总结

Watchtower 使用起来非常方便省心,并可以按需调整参数来满足不同用户的个性化需求,是Docker玩家必备利器!
更多详细使用文档可查看 watchtower官网

打赏