群晖 NAS 部署 Watchtower(Docker 镜像自动更新)

部署时间:2026-09-18 环境:群晖 DSM + Container Manager,NAS IP 192.168.0.51 Watchtower 版本:1.7.1


一、Watchtower 是什么

Watchtower 是一个 Docker 容器自动更新工具。它运行在 NAS 上,定时检查你所有 Docker 容器的镜像有没有新版本,有的话自动拉取新镜像、重建容器、清理旧镜像。

一句话:以后 NAS 上所有 Docker 服务自动保持最新,不用手动去镜像仓库点"拉取"。


二、部署前准备

目录结构(必须先在 File Station 建好)

/volume1/docker/watchtower/          ← 项目根目录
└── config/                          ← 配置目录(空文件夹即可)

注意:Watchtower 不需要 data/pgdata/ 这种数据目录,它只读取 Docker 的 socket 文件,本身不存数据。比部署 DTK 简单得多。


三、Container Manager 创建项目

  1. 打开 Container Manager → 项目新增
  2. 项目名称:watchtower
  3. 路径选:/docker/watchtower(就是上面建的目录)
  4. 选择"使用 docker-compose.yml 手动编排"
  5. 粘贴以下内容:
version: "3.8"
services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./config:/config
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=false
      - WATCHTOWER_SCHEDULE=0 0 4 * * *
  1. 完成,等待镜像拉取和容器启动

四、配置说明

配置项 作用
/var/run/docker.sock Watchtower 通过它读取/控制 Docker,必挂载
./config:/config 配置文件目录
TZ=Asia/Shanghai 时区,配合下面的定时任务
WATCHTOWER_CLEANUP=true 更新后自动删除旧镜像,不占磁盘
WATCHTOWER_REMOVE_VOLUMES=false 不删数据卷(保护 DTK 等服务的数据)
WATCHTOWER_SCHEDULE=0 0 4 * * * 每天凌晨 4 点自动检查更新

五、验证

容器启动后,进入 容器 → watchtower → 日志,正常输出应该是:

Watchtower 1.7.1
Checking all containers (except ...)
Scheduling first run: 2026-09-XX 04:00:00
Using no notifications

容器状态显示绿色、Up for XX seconds 即表示成功。

不需要映射端口,不需要网页访问。 Watchtower 是纯后台服务,想看它做了什么就来日志里看。


六、踩坑记录

坑 1:unknown flag: --http-api 导致反复重启

现象:容器启动后立刻退出,restart: always 又拉起来,反复循环,NAS 报警"容器意外停止"。

日志

level=fatal msg="unknown flag: --http-api"

原因:早期版本教程里写的 --http-api --http-api-port 8080 参数在新版 Watchtower 中已经被移除了。容器一启动就不认识这个参数,直接 fatal 退出。

解决:compose 里不要写 command:ports:,纯后台运行即可。

坑 2:改了 compose 文件不生效

现象:改了 docker-compose.yml 保存后,容器还是报同样的错。

原因:群晖 Container Manager 改 compose 文件后不会自动重建容器,旧容器带着旧参数继续跑。

解决删除整个项目 → 重新新建项目,不能只改文件后点重启。

坑 3:项目已停更

注意containrrr/watchtower 官方仓库已于 2025 年 12 月 17 日归档停止维护,不再有新功能和安全补丁。

活跃维护的 fork 是 nickfedor/watchtower,用法和参数基本一致,后续可将镜像名替换为:

image: nickfedor/watchtower:latest

七、日常使用

  • 完全不用管:它每天凌晨 4 点自动检查,有更新就自动升级。
  • 查看更新记录:Container Manager → 容器 → watchtower → 日志,会记录每次更新了哪个镜像。
  • 不需要公网访问:它只在本地 Docker 内部工作,不暴露任何端口。