前言
群晖的Docker功能非常丰富,不过也有不完美的地方,映像和容器更新比较麻烦,比如我的Docker容器运行了十几个,如果通过手动更新非常繁琐,容器还需要重新配置,本文就介绍如何通过watchtower全自动更新Docker映像,并保留原始配置重新运行容器。
watchtower 是一个可以监控正在运行的容器镜像是否有更新的工具,当本地镜像与远端镜像有差异的时候,可以自动使用当前容器的运行参数以新镜像重新创建一个新的容器,并删除旧的容器。这有点类似于我们手机应用商店更新 APP 一样。
部署教程
下载watchtower映像
群晖Docker搜索watchtower,下载containrrr/watchtower映像,下完即可,无需运行和配置。
手动更新容器,并清除旧容器
这里我们通过群晖的计划任务运行watchtower,打开群晖任务计划,新建一个计划任务-用户自定义脚本,填入以下脚本。
# 运行一次,更新所有的容器,并清除旧的容器
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once
当需要更新容器的时候,手动运行一下该计划任务即可,Docker容器中会运行一个watchtower,更新完成后watchtower自动停止。
手动/定时更新容器,完成后删除本次运行Watchtower容器
还是通过群晖的计划任务运行watchtower,每次更新完自动删除运行的watchtower容器,下次更新的时候再重新生成。
# 运行一次,更新所有的容器,并清除旧的容器,并删除watchtower容器
docker run --rm --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once
如果需要定时自动更新,将任务计划设置成固定周期自动运行即可。
指定容器更新
如无需自动更新所有稳定运行的容器,可以配置仅更新指定容器,只需要在命令后加上容器名.例如只更新nginx和redis。
#只更新nginx和redis
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once nginx redis
注意指定容器需填写 容器名 ,并非镜像名.由于部分容器启动时可能没有定义 --name 参数,请ssh登录群晖执行 docker ps 查询核对容器名.
其他更多参数见官网 https://containrrr.dev/watchtower/arguments/
本文经授权后发布,本文观点不代表立场