简介

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

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

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

启动

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

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

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

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

指定容器更新

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

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

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

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时我只需要运行

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

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镜像。

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