孙亮亮
返回 NAS 系统

NAS 系统

NAS 容器化应用纳管实战:用 Docker Compose + Watchtower 编排多服务并自动安全更新

2026年10月12日

NAS 用 Compose 纳管容器并安全自动更新

NASDocker容器编排自动更新

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 的可控自动更新,家庭服务栈就能进入"装上就稳、升级有谱"的状态。

本模块其他文章

NAS 容器化应用纳管实战:用 Docker Compose + Watchtower 编排多服务并自动安全更新 · 孙亮亮