NAS 系统
NAS 容器化应用纳管实战:用 Docker Compose + Watchtower 编排多服务并自动安全更新
2026年10月12日
NAS 用 Compose 纳管容器并安全自动更新
NAS 容器化应用纳管实战:用 Docker Compose + Watchtower 编排多服务并自动安全更新
摘要:家庭 NAS 上的容器越装越多,零散的 docker run 命令迟早变成运维灾难。本文用 Docker Compose 把多个家庭服务统一编排,并配合 Watchtower 做可控的自动更新与回滚。
为什么需要把 NAS 上的容器"管起来"
玩 NAS 半年后你大概率会遇到这样的局面:Jellyfin、Vaultwarden、Home Assistant、qBittorrent……每个都是当初随手 docker run 拉起来的。某天想迁移硬盘或重装系统,你根本想不起来当时挂了哪些目录、映射了哪些端口。容器一旦"野"了,升级和排错都无从下手。
纳管的核心目标只有三个:配置可复现、数据不丢、升级可控。Docker Compose 正好对应前两点,Watchtower 解决第三点。
基础:一份 Compose 编排多个家庭服务
在飞牛或群晖的 Docker 目录里新建 stacks/home/ 文件夹,放一份 docker-compose.yml:
version: "3.8"
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "8088:80"
volumes:
- ./vaultwarden:/data
environment:
- WEBSOCKET_ENABLED=true
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
ports:
- "8123:8123"
volumes:
- ./homeassistant:/config
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
启动只需 docker compose up -d。所有服务共享同一份声明文件,重装系统后 docker compose up -d 一行命令即可复原整栈。
数据卷的固化原则
最容易踩的坑是容器里的数据没挂到宿主目录。两个经验:第一,每个服务都在 ./<服务名> 下建独立子目录,避免互相污染;第二,端口和目录用相对路径,整文件夹打包就能迁移。飞牛 NAS 的 /vol1/@appdata 或群晖的 /volume1/docker 都是天然的存放位。
自动更新不是洪水猛兽:Watchtower 的安全姿势
手动盯每个镜像更新太累,但无脑自动更新又可能半夜把服务搞挂。折中方案是只更新指定容器,并且带监控与通知:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --cleanup --schedule "0 0 4 * * *" --notify-on-stop --include-stopped
environment:
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATION_URL=discord://token@id
关键是把 schedule 设在凌晨、加 --cleanup 自动清旧镜像省空间,并用 shoutrrr 把结果推到企业微信或 Discord。这样你每天醒来能看到"昨晚更新了哪些、是否成功"。
更新失败如何回滚
Watchtower 默认不保留旧镜像,回滚需提前准备。建议对非关键服务放开自动更新,对 Vaultwarden、Home Assistant 这类核心服务用 WATCHTOWER_LABEL_ENABLE=true 加标签控制,只更新你点名允许的容器。一旦更新后异常,手动 docker compose down && docker compose up -d vaultwarden:2024xxxx 拉回上一版镜像即可。
用 Portainer 做可视化纳管(可选)
如果你更习惯点界面,Portainer 的 stacks 功能能直接导入 Compose 文件,并在网页上看到每个容器的 CPU、内存、日志。它与命令行 Compose 完全兼容,二者可并存。
小结
把 NAS 容器收进 Compose 是迟早要做的一次性投入。声明式配置让迁移和重装不再恐慌,配合 Watchtower 的可控自动更新,家庭服务栈就能进入"装上就稳、升级有谱"的状态。