简介

watchtower 是一个用于自动更新 Docker 容器镜像的实用工具,它能够自动监控指定容器的更新,能够自动拉取最新镜像并实现平滑部署。

github 地址:https://github.com/containrrr/watchtower

官网:https://containrrr.dev/watchtower/

启动

服务器执行标准启动命令,watchtower 会以每 5 分钟检查 docker 所有容器是否已达到最新版本,如不是,则拉取最新镜像,停止运行容器,以最初的启动命令重新启动容器

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

可通过 --cleanup 删除旧版本镜像

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

指定容器更新

可在标准启动命令后加上指定容器名,便可指定容器更新

shell
1
2
3
4
5
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower 容器名 \
--cleanup

容器名指的是启动容器时设置 --name 参数的名称,比如我的 alist 启动命令:

shell
1
2
3
4
5
docker run -itd \
--name alist \
-p 9125:5244 \
-v /www/alist:/opt/alist/data \
--restart=always xhofe/alist:latest

则 alist 容器名为 alist,更新 alist 时我只需要运行

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

自动更新频率

可通过 --interval(简写 -i)参数,配置更新周期,默认 300 秒

或者 --schedule,(简写 -s) 配置定时更新,使用 Cron表达式 , 例如 "0 0 1 * * *". 即每天凌晨 1 点更新

配置了自动更新频率需要确定时区为 Asia

shell
1
2
3
4
5
6
docker run -d \
--name watchtower \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -i 1200 容器名 \
--cleanup

手动更新

可以通过 --run-once 实现运行 watchtower 容器更新后停止运行,即运行一次

还可添加 --rm 删除 watchtower 镜像。

shell
1
2
3
4
5
6
docker run --rm -d \
--name watchtower \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -i 1200 容器名 \
--cleanup --run-once

总结

虽然可以通过停止容器,拉取镜像,重新运行容器这三步操作来实现 watchtower 的功能,但是它能够简化命令,减少重新部署容器的运行参数错误,定时更新等等,是一个高效率的更新容器方式。

参考文章

https://www.ioiox.com/archives/84.html