watchtower自动化更新docker镜像

什么是 watchtower ?

watchtower 是一款实现自动化更新 Docker 镜像与容器的实用工具。它监控着所有正在运行的容器以及相关镜像,当检测本地镜像与镜像仓库中的镜像有差异时,会自动拉取最新镜像并使用最初部署时的参数重新启动相应的容器。

Docker手动升级流程

在介绍自动升级前,让先我们来了解一下手动升级的流程,以 Airsonic 为例

title

1、在注册表选择最新(latest)的映像下载(由于名字和以前下载的一样,在映像里只有一个,在DSM消息里有提示下载完成即可)

title

2、在容器里选择正在运行的 airsonic,在上面的操作里选择 停止-->清除-->启动,就完成升级了。(数据不会丢失)

title

3、映像下载慢可以使用阿里等国内镜像下载,启动完成后,已经是新版本了

title

用watchtower自动升级

一般采用 docker run 方式,SSH 登录到群晖后用命令行执行

快速启动

执行以下标准命令启动 watchtower 容器,watchtower 将开始监视我们正在运行的 Docker 容器,并每隔几分钟检查一次所有容器的镜像是否为最新版,如发现镜像更新将会自动停止容器,删除容器,拉取最新镜像,再以之前启动容器的命令启动容器。

1
2
3
4
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower

指定容器更新

如无需自动更新所有稳定运行的容器,可以配置仅更新指定容器,只需要在命令后加上容器名。例如只更新 nginxredis

1
2
3
4
5
6
7
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
nginx redis

远程主机

缺省情况下,watchtower监控的是本地的 docker daemon,但是也可以监控另一台机器上的 docker,比如我本机 IP 是 192.168.0.199,而另一台蜗牛星际的 IP 是 192.168.0.198

1
2
3
docker run -d \
--name watchtower \
containrrr/watchtower --host "tcp://192.168.0.199:2375"

或者

1
2
3
4
docker run -d \
--name watchtower \
-e DOCKER_HOST="tcp://192.168.0.199:2375" \
containrrr/watchtower

建议

不建议自动更新全部,而要用指定容器更新,因为有些项目升级可能会带来很严重的兼容性问题,比如 homeassistant0.82 升到 0.93,各种不兼容,折腾到差点放弃,所以现在虽然已经都 0.114 了,可我还是一直停留在 0.93

更多的参数和命令,比如定时更新等等,可以参考官方的文档https://containrrr.dev/watchtower/

目前我觉得手动升级足够了,毕竟也才30多个镜像而已

title

参考文档

Remote hosts - Watchtower
地址:https://containrrr.dev/watchtower/remote-hosts/

Watchtower - 自动更新 Docker 镜像与容器 - 思有云 - IOIOX
地址:https://www.ioiox.com/archives/84.html

群晖NAS下自动更新docker镜像_NAS存储_什么值得买
地址:https://post.smzdm.com/p/a6lrmn6n/

如何自动更新群晖docker的镜像与容器 | 生活的左上角
地址:https://bwskyer.com/synology-docker-install-watchtower.html