Watch­tower 官网: https://github.com/containrrr/watchtower

Watch­tower 可以用于自动更新 Docker 镜像与容器。Watch­tower 会监视正在运行的容器以及相关的镜像,当检测到 Reg­istry 中的镜像与本地的镜像有差异时,会拉取最新镜像并使用最初部署时相同的参数重新启动相应的容器。

1. 安装运行

Watch­tower 本身被打包为 Docker 镜像,因此可以像运行其他容器一样运行它:

1
2
3
4
5
6
7
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--interval 60

运行 Watch­tower 后,所有容器都会自动更新,也包括 Watch­tower 本身。

默认情况下 Watch­tower 每 5 分钟会轮询一次,可以使用--interval参数指定(单位秒)。

查看帮助文档:

1
docker run --rm containrrr/watchtower -h

2. 手动更新

前面的使用方式是让 Watch­tower 以 detached(后台)模式在运行并自动更新容器,而 Watch­tower 也支持以 foreground(前台)模式来使用,即运行一次退出并删掉容器,来实现手动更新容器。这对于偶尔更新一次那些不在自动更新列表中的容器非常有用。

对于 foreground 模式,需要加上 --run-once--run-once 可以简写为 -R)这个专用的选项。下面的例子 Docker 会运行一次 Watch­tower 并检查 aria2-pro 容器的基础镜像更新,最后删掉本次运行创建的 Watch­tower 容器。

1
2
3
4
5
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --cleanup \
--run-once \
aria2-pro

3. 更新私有镜像

如果是从私有 Docker 仓库获取镜像,则需提供身份验证凭据和环境变量 REPO_USER 和 REPO_PASS,或者通过将宿主机的 docker 配置文件挂载到容器的根目录下。

通过添加环境变量的方式:

1
2
3
4
5
6
docker run -d \
--name watchtower \
-e REPO_USER=username \
-e REPO_PASS=password \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower container_to_watch --debug

通过挂载宿主机 docker 配置文件的方式:

1
2
3
4
5
docker run -d \
--name watchtower \
-v /home/<user>/.docker/config.json:/config.json \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower container_to_watch --debug