Container Manager 上手:从镜像到容器
从 Docker 到 Container Manager
DSM 7.2 之后,群晖把原来的 Docker 套件正式更名为 Container Manager。这次更名不只是换了个图标:底层 Docker 引擎升级到了 24.x,界面重新设计,还新增了「项目」标签页,可以直接在图形界面里跑 docker-compose。原来的容器和镜像在升级后会原样保留,旧教程里的大多数操作也只是换了个入口位置而已。
对已经熟悉 DSM 基本操作的玩家来说,需要转变的观念只有一个:Container Manager 就是 Docker。Docker Hub 上的文档、docker run 命令、compose 文件在这里统统适用,你只是在「翻译界面」而不是「学习新产品」。如果更习惯命令行,也可以开启 SSH 直接用 docker 命令操作,和图形界面是完全等价的入口。
在开始之前,先确认两件事:第一,你的机型支持 Container Manager,J 系列入门型号和部分 Value 型号不提供该套件,套件中心搜不到就是不支持;第二,内存最好在 4 GB 以上,DSM 本身大约占用 1~2 GB,剩下的才是容器能用的空间。后台常驻十来个轻量容器,6 GB 是比较舒服的起点。
新装的 NAS 建议先做一项准备:在 File Station 里建一个共享文件夹 docker,专门存放所有容器的配置和数据。好处有三:权限可以统一授予某个用户、数据集中在一个地方方便整体备份、目录路径短且整齐。养成习惯后,/volume1/docker/应用名/ 就是你在这台 NAS 上所有容器的家。
界面总览:七个标签页各管什么
打开 Container Manager,左侧一列标签页就是它的全部功能。先记住每个标签页的分工,后面会少走很多弯路。
| 标签页 | 作用 | 使用场景 |
|---|---|---|
| 概览 | 显示运行中的服务和资源占用 | 平时可以忽略 |
| 容器 | 列出全部容器,也可用向导新建 | 单个容器的增删改查 |
| 镜像 | 本地镜像库,提示可更新版本 | 更新前先来这里下载 |
| 注册表 | 搜索并拉取 Docker Hub 镜像 | 找新应用时用 |
| 网络 | 管理 Docker 网络 | 配置自定义网桥 |
| 项目 | 图形化运行 docker-compose | 多容器编排主力 |
| 日志 | 套件自身的事件日志 | 排查启动失败 |
老玩家最容易忽略的是「项目」标签页。DSM 7.2 之前要用 compose 必须登录 SSH 敲命令,现在直接粘贴 YAML 就能起一整套服务,本栏目的后续文章会大量用到它。
拉取第一个镜像
以注册表拉取镜像为例,流程很简单:
- 打开「注册表」标签页,在搜索框输入应用名,比如
uptime-kuma。 - 找到带「Official Image」标记或下载量很高的条目,双击。
- 在弹出的标签列表里选一个版本。追新功能选
latest,求稳定选具体版本号,生产环境建议固定版本,方便回滚。 - 等待下载完成,「镜像」标签页里就会出现它。
选镜像有一条经验:越是热门的项目,镜像维护越勤快,文档也越完善。冷门镜像不是不能玩,但出问题时要自己读 Dockerfile 的心理准备要先有。
创建容器:向导走一遍
在「镜像」标签页里选中一个镜像,点击「运行」,就会进入容器创建向导。向导分常规、卷、端口、环境几个步骤,其中最关键的是下面三项。

第一项是网络模式。Bridge 是默认模式,容器拿到独立内网 IP,需要手动映射端口;Host 模式直接共享 NAS 的 IP,不用映射端口,但容易和 DSM 自身服务抢端口。
| 网络模式 | 是否要映射端口 | 适用场景 |
|---|---|---|
| Bridge | 是 | 绝大多数应用 |
| Host | 否 | 需要 mDNS 发现的设备类应用 |
| 自定义 macvlan | 否 | 想给容器分配局域网独立 IP |
第二项是卷映射,也就是目录挂载。容器是临时的,删掉容器它内部的数据就没了,所以配置文件和数据一定要映射到 NAS 的真实目录上。比如把 /volume1/docker/uptime-kuma 映射到容器内的 /app/data。这一步的详细玩法和权限坑,单独有一篇展开。
第三项是端口映射。本地端口填 NAS 上空闲的高位端口,容器端口填应用文档里写的端口。注意避开 DSM 自己占用的 80、443、5000、5001、8080,比如把应用的 80 映射到本地的 8081。
向导的高级设置里还有几项值得留意。「自动重启」建议勾上,NAS 重启后容器会自己回来;「资源限制」可以给容器封顶内存,防止个别应用吃光整机资源;「权限」里通常保持默认即可,除非文档明确要求特权模式。这些设置在容器建好之后还能再改,不用一次想清楚。
| 向导步骤 | 关键设置 | 建议值 |
|---|---|---|
| 常规 | 容器名称 | 应用名,便于识别 |
| 网络 | 端口映射 | 本地高位端口避开 8080 |
| 卷 | 文件或文件夹 | /volume1/docker/应用名 |
| 环境 | TZ | Asia/Shanghai |
| 高级 | 自动重启 | 勾选 |

从单容器到项目:向导的局限
向导建单个容器很顺手,但服务一多就捉襟见肘。一个很典型的例子是带数据库的应用:向导要分别建两个容器,再手动指定网络让对方互通,改了一次端口就要两边一起改。这种时候「项目」标签页就派上用场了,它把一整套服务的网络、端口、卷、依赖关系写进同一个 YAML 文件,一次部署、一键重建。
两种方式的分工很明确:临时试用一个新镜像,用向导快点看效果;打算长期运行的服务,尤其是两个以上容器配合的,一律写成项目。向导建出来的容器最终也能导出成配置,不如直接从 YAML 起步来得干净。项目这块的完整玩法见本系列的编排章节。
启动之后的例行检查
容器跑起来不等于万事大吉,养成三个小习惯:
一是在「容器」标签页里看状态是不是「运行中」,CPU 和内存曲线有没有异常飙升。二是点进容器详情看日志,应用启动时报的错一般都写在里面,数据库连不上、配置目录不可写这类问题日志里都有明示。三是在浏览器里实际访问一次端口,确认功能正常。
如果容器反复重启,最先怀疑三件事:端口被占用、配置目录权限不对、环境变量写错了。日志里通常会有明确的报错行,对照修改即可。想看容器到底占了哪些资源,也可以 SSH 上去用命令行排查。
端口与资源的长期规划
玩容器是会上瘾的,半年后你会发现 NAS 上跑了二十多个服务。所以从第一个容器开始就做两件事:一是建立统一的目录结构,所有容器配置都放在 /volume1/docker/<应用名>/ 下面,重装系统或者整机迁移时一把拷走,两分钟就能恢复全部服务;二是记录端口分配表,哪怕只是备忘录里几行字,记下「8081 给了 Uptime Kuma、8096 给了 Jellyfin、3000 给了镜像站」,半年后新建容器时你会感谢自己。网络知识扎实的读者,还可以顺便了解一下容器网络与局域网的关系,入门概念可参考 计算机网络基础。
容器的日常操作
容器跑稳之后,日常要做的操作就那么几样。在「容器」列表里右键某个容器,可以启动、停止、重启和删除;点容器名进详情,能实时看日志和资源曲线。要改配置的话,停止容器后点「编辑」即可,改完重新启动生效。唯独要注意:删除容器会把容器内部没映射出去的数据一并删掉,操作前先确认卷映射已经覆盖了所有重要目录。
端口冲突是最常见的一类问题,日志里一般会出现「端口已被占用」字样,换一个本地端口就能解决;其次是权限问题,表现是容器反复重启、日志里一串「拒绝访问」,这需要回头检查映射目录的归属,属于下一篇要展开的权限话题。
日志是排错的第一现场。点开容器详情的「日志」标签,默认显示最近的输出,右上角可以筛选级别。容器启动失败、应用连不上数据库、配置文件解析报错,这些信息都会原样写进日志,配合 命令行速查 里的排查手法,大多数问题都能自己定位。
另一个值得常用的是「镜像」标签页的更新提示。有新版本可用时镜像条目旁会出现提示,但 Container Manager 没有内置自动更新,更新流程要手动走:先下载新镜像,再停止容器、编辑容器把镜像版本切到新的、重新启动。更新的具体策略和回滚手法,在「容器自启、更新与资源限制」一篇里详细展开。
延伸阅读
- 目录映射与权限:坑最多的地方:卷映射与 PUID、PGID 的完整处理方案
- docker-compose 与多容器编排:用项目标签页一键管理整套服务
