Watchtower 是一个开源工具,用于自动更新运行中的 Docker 容器。它通过监听 Docker守护进程和拉取最新镜像,确保你的服务总是运行在最新版本上,并可清理旧镜像节省空间。
🔧 核心功能
- 🕒 定时检查更新: 支持 cron 格式定时检查(使用 --schedule)
- 🚀 自动拉取新镜像: 发现有新版本的镜像会自动拉取
- 🔄 自动重启容器: 使用新镜像重新创建并启动容器
- 🧹 清理旧镜像: 通过 --cleanup 删除被替换的旧镜像
- 🔖 标签过滤: 支持 --label-enable 只更新打标签的容器
- 📦 多容器支持: 可以指定容器名称,或默认更新所有可更新容器
- 🔒 安全选项: 支持 TLS、通知 webhook、自定义 Docker 主机等
🚀 应用场景
NAS服务器: 保证服务如allinone、IPTV-api、lucky等项目自动更新保持最新。
部署
飞牛 Compose方式部署代码
1️⃣我们需要先创建一个路径,这个路径储存我们的docker-Compose.yml的文件和配置文件

2️⃣打开Docker,Compose新增项目->输入项目名称->设置路径->上传或者创建docker-
compose.yml把下面代码复制进去,点击完成直至构建完成

🐳Compose代码
1️⃣方法一:全部更新
✅如下:每天凌晨 3 点更新全部容器,并自动删除旧镜像
version: '3'
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
command: --schedule "0 0 3 * * *" --cleanup
2️⃣方法二:指定容器名更新
✅ 假设我们凌晨3点只想更新 **、lucky 这两个容器,我们可以把容器名称追加到command启动命令的最后面,如下面这个例子:
version: '3'
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
command: --schedule "0 0 3 * * *" --cleanup ** lucky
⚠️ 注意:此方法不能与方法三 --label-enable 一起使用。
飞牛查看容器名:

命令获取容器名:
docker ps --format "table {{.Names}}\t{{.Image}}"

3️⃣方法三:使用标签特性自动更新(⭐️推荐)
这个标签的作用是:只有当要更新的容器打上这个标签时,Watchtower 才会在凌晨3点更新它。需要在 Watchtower 启动命令里加上
--label-enable 来启用这个行为:
# 特性标签
labels:
- "com.centu**inklabs.watchtower.enable=true"
# Watchtower 启动命令里加上 --label-enable
version: '3'
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
command: --schedule "0 0 3 * * *" --cleanup --label-enable
📌 示例自动更新lucky,就需要在lucky部署代码中加入更新特性标签
# 示例
version: '3.8'
services:
lucky:
image: ghcr.io/linuxserver/lucky:latest
container_name: lucky
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config:/config
ports:
- 8000:8000
labels:
- "com.centu**inklabs.watchtower.enable=true" # ✔ 启用 Watchtower 更新此容器
restart: unless-stopped
⚠️ 并不会更新使用特定tag指定版本(如 lucky:1.2.3)的容器,只有 tag 为 latest 或浮动标签的才会自动更新。
✉️带邮件通知
每天凌晨 3 点更新所有容器并通过邮件发送更新报告
本地创建.env 文件内容(放到与 docker-compose.yml 同目录):

📦 不会创建的公众号回复: env 获取网盘下载地址
# 设置时区
TZ=Asia/Shanghai
# Watchtower 邮件通知相关配置
WATCHTOWER_NOTIFICATIONS=email
WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@example.com # 发件人邮箱
WATCHTOWER_NOTIFICATION_EMAIL_TO=your_email@example.com # 收件人邮箱
WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com # SMTP 服务器地址
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=465 # 端口 465/25,看你用的是 TLS/SSL
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=watchtower@example.com # SMTP 用户名
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=yourpassword # SMTP 密码或授权码
WATCHTOWER_NOTIFICATION_EMAIL_DELAY=30 # 邮件发送延迟(单位:秒)
📌 注意事项:
- 邮箱发件账户设置的是“授权码”而非登录密码,教程自行百度;
- Gmail 用户推荐使用 应用专用密码;
- 阿里云、腾讯云、**云邮箱一般都需要开启 SMTP 服务;
- 发件邮箱可以和收件邮箱为同一个。
Compose中加入.env,例如:
version: '3'
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
env_file:
- .env # 调用.env邮件配置文件
restart: unless-stopped
command: --schedule "0 0 3 * * *" --cleanup --label-enable
✅ 部署完成之后就会立即执行一遍的,我配置了邮件通知,就会收到消息提醒

结尾
以上几种方法根据个人要求使用,以前飞牛镜像更新是有问题的,现在已经修复了,能通过Watchtower
正常更新镜像,对需要一直保持最新版才好使的项目(肥羊、iptv等)可以使用这个项目自动更新,对于稳定使用并不需要频繁更新的就尽量别更新,能用就行。
更多内容看官方文档
https://containrrr.dev/watchtower/