群晖之所以备受欢迎,是因为它完善的系统,以及使用Docker可扩展丰富的可玩性。而Docker中的映像不是一成不变的,它是在不断更新,开发新的功能或者修复Bug的。但是我们配置好的容器是不会自动更新的,如果删除容器,重新下载新的映像并重新安装,那么原来的配置都会没了,需要重新配置。
我是一个很听劝的人,刚刚研究了怎么手动无损升级Docker容器,就有朋友推荐可以使用watchtower实现映像的自动无损升级。这可比我的手动无损升级更好用呀,赶紧来学习折腾一下。
先来说一下watchtower,它可以监视 Docker Hub 或私有仓库中的映像,并在发现新的映像版本时自动更新容器,我们可以通过定时任务来执行watchtower,可以在后台自定义的时间自动更新有新版的Docker。
我的群晖DSM是7.2版本的,它的Docker是使用Container Manager进行管理,首先在Container Manager的注册表菜单中搜索“watchtower”,我选择的是下载量最多的“containrrr/watchtower”,下拉最新版的映像。
![](http://image.uc.cn/s/wemedia/s/upload/2024/0f9c4bbc1120a1f00ab2c484b4d1d697.png)
下载完成以后无需运行映像,到“控制面板”中找到任务计划。
![](http://image.uc.cn/s/wemedia/s/upload/2024/c2a6aed343d339168afb25539ef99ef6.png)
在任务计划中,逐层选择新增-计划的任务-用户定义的脚本
![](http://image.uc.cn/s/wemedia/s/upload/2024/5f9eb3251ff501937048332df44c25ad.png)
在常规设置中,任务名称可以自己随便起,不过必须是英文和数字,用户选择root
![](http://image.uc.cn/s/wemedia/s/upload/2024/fe6ba12e3307bd9b960d4d59cc97130f.png)
在计划设置中,设置任务运行的周期以及时间,想每天更新的可以选择每天重复,我觉得没有必要每天都去更新,就选择了每周一的5:00进行更新,因为这个时间我不会使用Docker,避免更新而造成的使用的中断
![](http://image.uc.cn/s/wemedia/s/upload/2024/b7b6334cff71cfd3c8d70eb6d0cef1cc.png)
在任务设置中,输入我们的命令,其中“linuxserver-radarr-1”是指定要更新的容器的名称,如果为空的话是全部更新,我只是指定了我需要更新的容器,避免一些重要的Docker因更新造成运行不稳定。如果多个容器需要更新,可填写多个名称,中间用空格隔开。
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once linuxserver-radarr-1
![](http://image.uc.cn/s/wemedia/s/upload/2024/8722cb4e81647f77aff46bce74beb549.png)
我手动执行了一次命令,经过短暂的运行可以看到,我的radarr从4.6.4.7568更新到了5.3.6.8612,成功进行了更新,并且全部的设置都没有变化,无需重新配置,即时可用。
![](http://image.uc.cn/s/wemedia/s/upload/2024/a14a465b95054bea7d2b75c53dcc576f.png)
![](http://image.uc.cn/s/wemedia/s/upload/2024/2765cac9b784bfa7f342d907d57f1ddc.png)
如果映像有更新的话,它会停止容器才进行更新,所以我们的邮箱会收到容器异常停止的邮件
![](http://image.uc.cn/s/wemedia/s/upload/2024/06f6632fc861eb9a411924bbe2e035ac.png)
当然我设置的执行任务计划,也是会有邮件反馈的,在邮件中,也可以看到发现了linuxserver-radarr-1,并进行了更新
![](http://image.uc.cn/s/wemedia/s/upload/2024/e5cf41be15c88b55636f15d495fcba08.png)
如果没有发现新版本的映像,邮件中显示顺利执行一次任务
![](http://image.uc.cn/s/wemedia/s/upload/2024/08709712d99a28a5ac5a53fd9c440342.png)
通过watchtower,可以实现Docker容器的自动定时无损更新,如果我们使用了大量的Docker,这个更方便的管理方法。