Skip to content

利用 Watchtower 自动监听并更新正在运行的 Docker 容器 ​

2025-12-02 更新

原版 Watchtower 已经两年没更新了,可以用 nickfedor/watchtower 替代 containrrr/watchtower

前言 ​

大部分 VPS 和 NAS 用户或多或少都有用 Docker 来部署一些 Self-hosting 的服务,其中大部分项目都是开源项目,更新频率非常高,特别是一些版本 0.x 的项目,及时的将 Docker 容器更新到最新版本不仅可以体验到新特性,还能减少 BUG。

但是一旦部署的容器多起来,就不知道到底哪一个项目更新了,哪一个项目没有更新,即便是有类似 Portainer、Dockge 之类的可视化工具,更新 Docker 容器还是一件麻烦事。

而今天介绍的 Watchtower 可以帮助我们解决这个烦恼,启动 Watchtower 后,它将监控正在运行的 Docker 容器以及这些容器最初启动时所用的镜像是否发生变化。如果检测到镜像发生更改,Watchtower 会拉取新的镜像,然后正常关闭现有容器,再使用最初部署时的相同选项重新启动它。

简单用法 ​

Watchtower 本身也是一个 Docker 容器,你可以直接通过 docker run 来启动它,所有的容器都会自动更新

危险

谨慎运行以下代码,所有的容器都会更新!更多的配置请继续往后面看!

sh
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

配置项 ​

由于默认情况下的 Watchtower 会更新的所有的容器,我们可以通过配置项来进行设置,Watchtower 提供的配置项非常的多,可以参考官方文档,下面只介绍最常用的几个配置项。

更新指定容器 ​

如果不希望更新所有的容器,只需要将要自动更新的容器名作为参数写在启动命令中,例如下面的命令只会更新 nginx 和 redis

sh
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    nginx redis

忽略指定容器 ​

如果你不希望某个容器不更新,可以通过 --disable-containers 参数(简写为 -x)将其忽略

清理旧镜像 ​

如果你希望在容器更新完成后,自动清理旧的镜像,可以添加上 --cleanup 参数(简写为 -c)

运行频率 ​

默认情况下,Watchtower 会一直运行,以 86400s 的频率轮询检测 Docker 容器是否有更新,你可以通过 --interval 参数(简写为 -i)修改其运行频率,单位为秒,也可以通过 --schedule 参数(简写为 -s)来让它定时运行,参数为 6 字段的 Cron 表达式,两个参数只能选择其中一个

手动运行 ​

默认情况下,Watchtower 是轮询检测 Docker 容器更新的,你也可以通过 --run-once 参数(简写为 -R)来让它只运行一次,每次运行完毕后 Watchtower 都会自动退出并删除自身

完整用法 ​

上面的这些配置项看的一头雾水?没关系,下面给出完整的 Docker Compose 包含常用的一些配置项,每天的凌晨 4 点会自动更新所有的 Docker 容器,并且将旧镜像移除。如果需要更新指定容器或者忽略指定容器,只需要在 command 后面加上对应的容器名即可

sh
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro
    command: --cleanup --schedule "0 0 4 * * *"

Last updated:

Evoxt:Evoxt:
最便宜的亚太优化线路 —— 马来西亚 电信 GIA / 联通 9929 仅需 $3.32 起!
95 折优惠码AFF2377-DEV
🎉银河录像局:
Netflix / Spotify/ ChatGPT / Claude 等 AI 流媒体一站式合租平台!
95 折优惠码zhichao
关注微信公众号
优化线路
Evoxt

Evoxt

最便宜的亚太优化线路

马来西亚 电信 GIA / 联通 9929
优惠码:AFF2377-DEV

1C / 512MB / 5GB SSD / 150GB 流量

$3.32/月
优化线路
搬瓦工

搬瓦工

15 个机房自由切换

洛杉矶 DC6 机房
电信 / 联通 GIA + 移动 CMIN2

2C / 2GB / 40GB SSD / 1TB 流量

$49.99/季