前言
Watchtower 是一个用于自动更新 Docker 容器的开源工具。它会定期检查运行中的容器镜像是否有新版本,如果有新的版本,就会拉取新的镜像并重新启动容器。这个过程是自动化的,无需手动干预,非常适合那些需要持续更新的 Docker 环境。
准备条件
一台服务器或者 NAS
我们使用飞牛云 NAS 和 VPS 来演示
需要 VPS 的可以看下 VPS 官网
本项目使用到的 GitHub
① 飞牛 NAS 上搭建
直接在 Docker 新增一个 Compose 项目即可

项目名称:watchtower
docker-compose 配置如下:
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_INTERVAL=3600 # 设置为每小时检查一次(3600秒)
- WATCHTOWER_CLEANUP=true # 自动清理未使用的旧镜像
restart: always
启动成功

国内如果无法使用 Docker 的可以尝试更换 Docker 镜像仓库
补充 Docker 可用的镜像仓库
https://proxy.1panel.live/
https://docker.1panel.top/
https://mirror.azure.cn/
https://hub.rat.dev/
https://docker.1ms.run
VPS 上搭建
Docker 环境部署
在 VPS 安装 Docker 和 Docker-compose
- Docker 官方安装文档(英文):https://duan.yyzq.eu.org/docker-001
- Docker-Compose 官方安装文档(英文):https://duan.yyzq.eu.org/docker-002
- Centos 安装 Docker 和 Docker-compose(中文):https://duan.yyzq.eu.org//03
- Ubuntu 安装 Docker 和 Docker-compose(中文):https://duan.yyzq.eu.org//04
推荐直接用一键脚本
Docker 安装脚本
bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)
Docker-compose 安装脚本
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
创建 docker-compose.yml 文件
mkdir watchtower; cd watchtower # 创建一个目录,并进入此目录
vim docker-compose.yml
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_INTERVAL=3600 # 设置为每小时检查一次(3600秒)
- WATCHTOWER_CLEANUP=true # 自动清理未使用的旧镜像
restart: always
执行容器运行命令
docker-compose up -d # 运行容器
docker-compose ps # 查看是否开启成功
正常启动如下所示:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
watchtower-watchtower-1 containrrr/watchtower "/watchtower" watchtower 2 hours ago Up About an hour (healthy) 8080/tcp
一、主要功能
1.1 自动拉取镜像
Watchtower 会定期检查镜像的版本,如果发现有新的版本,它会自动拉取更新的镜像。
1.2 自动重启容器
更新镜像后,Watchtower 会自动停止旧容器,并使用新镜像启动一个新容器。这样,容器始终保持最新的镜像版本。
1.3 支持多个容器
你可以将 Watchtower 配置为更新单个容器、多个容器或整个系统上的所有容器。
1.4 轻量级
Watchtower 作为一个 Docker 容器运行,内存和资源消耗非常低,只需要 docker.sock 的访问权限来与 Docker 引擎交互。
1.5 灵活的配置
通过环境变量,你可以控制 Watchtower 的许多行为,比如更新频率、是否通知、更新特定容器等。
二、工作原理
2.1 容器监控
Watchtower 定期扫描宿主机上的容器,检查它们使用的镜像是否有更新。
2.2 镜像更新
如果找到镜像的新版本,Watchtower 会自动拉取该镜像并重新启动容器。
2.3 容器重启
旧的容器会被停止并移除,新的容器会使用更新后的镜像重新启动。这个过程是无缝的,基本不需要人工干预。
三、安装与配置
Watchtower 可以通过 Docker Compose 或直接使用 Docker 命令来启动。最常见的做法是通过 docker-compose.yml 文件来定义 Watchtower 服务。
一个基本的配置示例:
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_INTERVAL=3600 # 设置为每小时检查一次(3600秒)
- WATCHTOWER_CLEANUP=true # 自动清理未使用的旧镜像
restart: always
volumes配置了/var/run/docker.sock,使 Watchtower 能够与 Docker 引擎进行通信。WATCHTOWER_INTERVAL是设置检查间隔,单位是秒,默认为 24 小时。WATCHTOWER_CLEANUP是自动清理未使用的旧镜像restart: always使得 Watchtower 在容器停止后会自动重启。
四、主要配置选项
- WATCHTOWER_INTERVAL:控制检查更新的时间间隔,单位是秒。例如,
WATCHTOWER_INTERVAL=3600表示每小时检查一次。 - WATCHTOWER_CLEANUP:如果设置为 true,更新后会自动删除旧的镜像,帮助清理无用的磁盘空间。
- WATCHTOWER_LABEL_ENABLE:启用容器标签过滤,仅更新具有特定标签的容器。
- WATCHTOWER_LABEL_FILTER:通过标签来筛选需要更新的容器,避免更新不必要的容器。
- WATCHTOWER_NOTIFICATION:启用通知功能,支持通过 Slack、邮件等方式发送通知。
- WATCHTOWER_NO_RESTART:如果设置为 true,更新镜像后不会自动重启容器,需要手动操作。
五、高级功能
5.1 通知
Watchtower 支持多种通知方式,包括 Slack、邮件、Webhook 等。你可以在容器更新时接收到通知。
示例(使用 Slack):
environment:
- WATCHTOWER_NOTIFICATION=slack
- WATCHTOWER_NOTIFICATION_SLACK_URL="https://hooks.slack.com/services/your/slack/webhook"
5.2 指定容器更新
你可以通过标签来限制 Watchtower 只更新特定的容器,而不是系统中所有容器。
示例(只更新 myapp 镜像):
environment:
- WATCHTOWER_MONITOR_ONLY="myapp"
5.3 强制更新
即使镜像没有发生变化,Watchtower 也可以强制拉取并更新容器镜像。
示例:
environment:
- WATCHTOWER_FORCE_PULL=true
更新指定容器的镜像:通过配置 WATCHTOWER_MONITOR_ONLY 环境变量来指定只更新某些镜像。
示例:
environment:
- WATCHTOWER_MONITOR_ONLY="myapp,anotherapp"
六、安全性
6.1 访问控制
Watchtower 需要访问 Docker 的 socket(通过 /var/run/docker.sock),这意味着它需要足够的权限与 Docker 引擎进行交互。确保你信任 Watchtower,并了解它所拥有的权限。
6.2 自动更新风险
自动更新可能会带来一些风险,特别是当新版本的容器镜像包含破坏性变化时。如果你有严格的版本控制或测试要求,可以通过配置只更新特定镜像或标签来避免过于频繁的自动更新。
总结
Watchtower 是一个轻量且功能强大的工具,能够帮助 Docker 用户自动化容器的更新过程。它支持定期检查镜像更新、自动拉取新镜像并重启容器,非常适合用于需要自动保持容器镜像最新的场景。通过灵活的配置选项,你可以控制更新频率、通知机制和容器选择等。
如果你希望让你的 Docker 环境更加自动化,Watchtower 是一个非常有用的工具。