跳转到内容

为什么在 NAS 上用容器 ​

读完这篇,你能判断一个应用该不该用容器,知道容器的数据该放在哪,也能在 OMV 的三种容器方案里选出适合自己的那一种。

容器是什么 ​

  • 镜像(image):别人把一个应用和它依赖的库打成的一个包。
  • 容器(container):用镜像跑起来的一个实例。它有自己的进程、文件系统和网络,看起来像一台独立的小机器。
  • 卷(volume)与绑定挂载(bind mount):把容器外面的目录接进容器里。容器被删掉重建时,接进去的目录还在,应用的配置和数据就放在这里。
  • 端口映射:把容器里的某个端口接到 NAS 的某个端口上,浏览器才能访问到它。

容器和虚拟机不一样:它共用 NAS 的内核,不带完整的操作系统,所以启动快、占用小,但隔离没有虚拟机深。另外镜像分 CPU 架构,OMV 8 只有 amd64 和 arm64,选镜像时要确认它支持你的架构。

为什么官方建议用容器 ​

OMV 官方文档的态度很明确:额外的软件,强烈建议用 Podman 或 Docker 跑容器。原因是以前出过很多事,软件版本更新带来了互相冲突的依赖,让 OMV 或那个软件没法用。插件只是为了方便才存在。

直接装在 OMV 上容器虚拟机
依赖冲突可能把 OMV 弄坏依赖打在镜像里,不碰系统完全独立
资源占用最小很小,共用内核大,要给整套系统
升级和系统更新绑在一起拉新镜像,重建容器单独升级
隔离程度没有进程、文件、网络隔离最强
在 OMV 上怎么做插件或 aptCompose 插件KVM 插件

对 NAS 来说,容器还有两个实际的好处:

  • 好迁移:一个 compose 文件加几个数据目录,拷到另一台机器就能接着跑。
  • 好备份:配置和数据集中在几个目录里,备份这些目录就行。数据库类应用要多一步,见更新与备份容器。

不是什么都适合容器

要和内核、磁盘、用户体系深度打交道的功能,用 OMV 自己的功能或插件:RAID、ZFS、mergerfs、SMB、UPS(NUT)、WireGuard 等。判断标准见插件还是容器。

容器的数据放哪 ​

这是用容器最重要的一个决定,装完再改要搬数据。推荐的做法来自 omv-extras wiki 的《Docker in OMV 8》:

内容放在哪里为什么
compose 文件(.yml、.env)共享文件夹 appdata,由插件管理插件会自己生成,别手改
应用的配置和数据库appdata 下按应用分子目录放在 SSD 上,应用更快
大数据:媒体、照片、文档单独的共享文件夹可以同时用 SMB 共享,也方便单独备份
Docker 自己的数据:镜像、卷、日志共享文件夹 docker,放在独立的盘避免撑满系统盘;重装 OMV 时不受影响
插件的计划备份共享文件夹 backup_compose最好和上面几项不在同一块盘

几条要点:

  • 别把 Docker 的数据放在系统盘上,尤其是 U 盘或 SD 卡:Docker 持续写入,即使装了 writecache 也会折寿;放在系统盘上还可能把根目录撑满。wiki 建议 Docker 所在的盘至少 60–100 GB,大型媒体库再多留一些。
  • Docker 的目录优先用 EXT4。不要放进 mergerfs 池,也不要放在 NTFS 上。
  • 共享文件夹的名字可以自己取,本站统一用 appdata、data、backup_compose、docker。怎么建见安装 Docker 与 Compose 插件。

三条路:Compose、Podman、Kubernetes ​

方案来源引擎适合
Compose 插件(openmediavault-compose)omv-extrasDocker绝大多数应用。网上的 compose 文件可以直接参考,插件自带约两百个示例(截至 2026-10-23 为 197 个)
Podman 插件(openmediavault-podman)官方Podman查看官方容器类插件(FileBrowser、PhotoPrism 等)用的容器,不是用来部署你自己的应用
Kubernetes 插件(openmediavault-k8s)官方K3s,单节点想学 Kubernetes,或者想用官方 recipes

新手选 Compose 插件,本章余下的文章都以它为准。后两者的定位见官方容器方案:Podman 与 Kubernetes 插件。

几个必须知道的事 ​

容器的权限,就是它运行用户的权限

容器里的程序能读写哪些文件,取决于它以哪个用户(UID 和 GID)运行。如果把容器映射成 root,容器里的程序一旦被攻破,攻击者拿到的就是整台 NAS 的权限。属于 docker 组的用户同样等价于 root。

做法见容器权限:PUID、PGID 与共享文件夹。

  • 删容器不等于删数据,但只限于映射出来的目录。容器里没映射的部分,随容器一起消失。
  • 端口映射默认对整个局域网开放,而且 OMV 防火墙的规则通常管不到它,见写好 compose 文件。
  • 别混装 Docker:Compose 插件装的是 Docker 官方源的 docker-ce。不要再用 apt 手装 Debian 自带的 docker.io,二选一。
  • 官方不支持把 OMV 装进 LXC 容器里;在虚拟机里装 OMV,再在里面跑 Docker 是可以的。

检查结果 ​

读完后你应该能回答这四个问题,回答不上来就先别动手:

  1. 这个应用的配置和数据,会放在哪个共享文件夹?
  2. 容器用哪个用户写这些目录?
  3. 备份会写到哪块盘?
  4. 更新出问题时,怎么退回去?

常见问题 ​

容器会比直接装慢吗? CPU 和内存上差别很小。真正影响速度的是数据所在的盘:数据库和缓存放机械盘会明显慢,所以配置目录尽量放 SSD。

我已经用 apt 装了软件,要迁到容器吗? 不强制。但以后升级出问题时,容器的退路更清楚。迁移前先备份,并核对数据格式是否兼容。

NAS 重启后容器会自己起来吗? 插件示例里的 restart: unless-stopped 会让它在 Docker 启动后自动起来。没起来时见重启后容器没起来。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。