
简介这份图文教程面向使用绿联 DX4600同系列 DH2600 亦可参考NAS 的用户聚焦在 Docker 环境中部署 Alist 并挂载常见网盘适合刚接触 NAS 容器、希望按图操作少走弯路的小白读者。压缩包内共 1 个 PDF 文件约 2.91MB内容以截图配文字步骤组织覆盖镜像搜索与下载、容器创建、存储空间与端口设置、初始密码获取及登录改密并进一步演示阿里云盘、115 网盘等挂载时的令牌与 Cookie 填写方法。教程还给出目录引导和重启策略、只读改读写等易错点提醒便于读者边看边核对快速搭起可用的 Alist 网盘聚合入口。目前已有 915 人学习适合作为绿联 NAS 上 Alist 部署与网盘挂载的实操参考。1. 绿联 DX4600 装 Alist先看清镜像和端口这两道关绿联 DX4600 上装 Alist全程都在图形界面里点鼠标看着比敲命令行省事实际卡人的地方一个不少。第一次装的人十有八九会踩三个点镜像标签随手选了 latest、存储目录指到了/Docker/alist而不是它下面的data、本地端口 5244 又跟别的容器撞了车。结果就是容器显示「运行中」浏览器死活打不开或者当天打开都正常NAS 重启一次配置全没了网盘白挂。这套流程在 DH2600 上基本一致群晖和极空间的 Docker 面板字段名对不上照抄要打折。下面按我实际装的顺序走一遍从拉镜像到挂上第一个网盘装完能直接验。2. 拉镜像与建目录xhofe/alist 的标签取舍和 data 路径2.1 镜像管理里搜 xhofe别在仓库列表里瞎逛进绿联的 Docker 主页面左侧是「镜像管理」「容器管理」这几项。点「镜像管理」上方切到「本地镜像」下方有个「添加」按钮弹窗里选「官方库」在「URL/镜像名称」输入框里敲xhofe回车。列表会出来一串选第一个xhofe/alist确定然后就是等。这里第一个容易犯的错是看到搜索结果里有alistdesktop、alist-encrypt之类名字相近的镜像手一抖选了别的。Alist 本体就是xhofe/alist别的一个都别碰那些是周边工具装上去端口和配置完全不是一回事。第二个错是标签。绿联这个搜索框默认给你的是latest。latest不是不能用问题在于它跟着上游走哪天容器重建、镜像重新拉一次版本就变了配置项字段名有可能跟着改你按旧教程填的存储会报错。我一般会点开镜像右侧的下拉明确选一个带版本号的标签比如xhofe/alist:v3装完在容器详情里能看到固定版本后面出问题好定位。提示镜像下载卡在某个百分比不动是常事多半是那一时段拉取不顺不是镜像本身坏了。等两分钟没动静就取消重来别反复点。下载完成会出现All done点「完成」。回到「本地镜像」如果列表里没看到刚下的镜像点右上角「刷新」。这一步别嫌烦绿联面板的本地镜像列表刷新有延迟很多人以为下载失败其实只是没刷新重复下了三遍。如果图形界面实在拉不下来SSH 进去用命令行拉是等效的也是我常用的兜底# 先在 SSH 里确认 Docker 命令可用绿联需要先在设置里开启 SSH docker version --format {{.Server.Version}} # 拉取指定版本标签避免 latest 漂移 docker pull xhofe/alist:v3 # 拉完看一眼本地镜像列表里有没有它 docker images | grep xhofedocker version --format那行只取服务端版本号用来确认守护进程正常比docker info输出短得多。docker pull后面必须写全仓库名:标签只写xhofe/alist等价于latest。docker images | grep用来核对拉下来的镜像 ID 和大小正常情况下会看到一个几百 MB 的条目。镜像名和界面上「本地镜像」里的名字应当一一对应对不上说明你拉到了另一个仓库的同名镜像。2.2 先把 Docker/alist/data 建出来再谈挂载存储空间这一步是整个安装里最容易埋雷的地方原文里那句「提前在存储空间根目录内创建 Docker alist data」是重点不是可选项。为什么要多建一层data因为 Alist 容器内部的程序目录是/opt/alist运行时产生的数据库、配置、缩略图缓存全部落在/opt/alist/data里。如果你把宿主机的/Docker/alist整个映射到容器的/opt/alist看似也行但容器镜像更新时/opt/alist下的程序文件会被新镜像覆盖你的配置和宿主目录混在一起出问题时根本分不清哪个文件是数据、哪个是程序。映射到data这一层宿主机上就只有一个干净的数据目录备份、迁移、重建容器都只动这一个文件夹。建目录可以在绿联的文件管理里点也可以 SSH# 先看 NAS 上各个存储卷的挂载点和剩余空间确认 Docker 目录放在哪块盘 df -h | grep -E volume|mnt # 在选定的卷上一次性建出三级目录-p 保证父目录不存在时也一并创建 mkdir -p /volume2/Docker/alist/data # 确认目录属主和权限容器内 alist 以 root 跑目录可写即可 ls -ld /volume2/Docker/alist/datadf -h过滤出卷挂载点是为了避免把数据目录建在一块快满的盘上——Alist 挂网盘之后会有缩略图和临时文件产生盘满了容器会莫名其妙退出。mkdir -p的-p是关键缺了它父目录不存在会直接报错。ls -ld看的是目录本身的权限位正常应该是drwxr-xr-x起步如果是dr-xr-xr-x说明带了个只读位后面在面板里点「读写」也是白点得先chmod。路径里的/volume2只是举例。绿联不同型号、不同硬盘位对应的卷名不一样最稳的做法是先在图形界面里选定目录创建容器再用docker inspect反查真实路径见 2.3别照抄别人教程里的卷号。2.3 用 SSH 复核一遍挂载图形界面没告诉你的那一半容器创建完之后绿联面板只告诉你「映射成功」不会告诉你映射到了容器内哪个路径。这一层如果错了表现是容器正常跑、页面能打开、但一重启配置就回滚属于典型的隐性故障。# 反查容器的真实挂载关系Source 是宿主机路径Destination 是容器内路径 docker inspect alist \ --format {{range .Mounts}}{{.Source}} - {{.Destination}} (rw{{.RW}}){{\n}}{{end}}--format里的range .Mounts遍历所有挂载点rw直接告诉你这个挂载是不是读写。期望输出只有一行且长这样/volume2/Docker/alist/data - /opt/alist/data (rwtrue)。三种异常输出对应三种处理实际输出说明处理/volume2/Docker/alist - /opt/alist/data少映射了一层 data删容器重建源目录指到 data/volume2/Docker/alist/data - /opt/alist方向和层级都偏了重建目标必须是/opt/alist/datarwfalse面板里「只读」没切成「读写」容器详情里改挂载权限后重启这一步看着啰嗦但它把「重启丢配置」这个最恶心的问题提前掐掉了。网上不少 docker 课程资源讲-v的时候一句带过真装的时候栽跟头的全是这个参数。3. 容器参数配置5244 端口、重启策略和初始密码3.1 端口设置容器端口写死 5244本地端口才可改在本地镜像列表里点xhofe/alist下面的「创建容器」改个自己能认出来的容器名比如alist然后打开「高级模式」点「下一步」。接着按顺序走到「端口设置」。这里有个概念必须先分清端口设置里有两栏一栏是容器端口一栏是本地端口有的版本叫宿主端口。容器端口是镜像内部约定好的Alist 就是 5244不能改改了容器里的服务根本不在那个端口上监听。本地端口才是你在浏览器里访问用的可以随便改只要不和 NAS 上已有的容器、系统服务冲突。原文说本地端口填 5244我认同这个做法尤其是第一次装的人两边都填 5244 最不容易乱。等你装了五六个容器再按自己的习惯排号比如把 Alist 放 15244访问地址就是NAS的IP:15244。冲突怎么判断不用猜SSH 里一条命令# 看 5244 有没有被别的进程占用有输出就说明撞了 ss -lntp | grep :5244 # 备用写法老系统上可能没有 ss netstat -lntp | grep :5244ss -lntp的四个参数分别是显示监听态、不解析域名快、显示 TCP、显示进程名。如果输出里出现的是别的容器名或某个系统进程就把本地端口换成 5245 之类没用过的号容器端口保持 5244 不动。等价的docker run写法是这样理解了这个图形界面里那几个输入框就都通了docker run -d \ --name alist \ --restart always \ -p 5244:5244 \ -v /volume2/Docker/alist/data:/opt/alist/data \ xhofe/alist:v3-d后台运行--name给容器起名后面所有docker logs、docker exec都靠这个名字--restart always就是图形界面里那个「容器退出时总是重启容器」-p 宿主端口:容器端口的冒号左右千万别写反写反了页面打不开还不报错-v 宿主路径:容器内路径同理。最后那个镜像名带上标签和docker pull拉下来的保持一致。3.2 重启策略选「容器退出时总是重启」的取舍原文在重启策略那里写的是「建议选容器退出时总是重启容器」还特意补了句「当然只是建议」。这个补充是有道理的值得展开说说。Alist 是常驻型服务进程本身很轻正常情况不会自己退出。选「总是重启」好处是 NAS 意外断电恢复、或者宿主机 Docker 服务重启之后容器自己就起来了不用你手动点「启动」。挂了一堆网盘之后你八成不会天天开面板看容器状态这条策略省的就是这个心。代价也有如果配置写错了导致容器启动就崩它会陷入反复重启的循环日志被刷得飞快反而不好排查。所以我的一般做法是分两步——第一次创建容器时先不选重启策略手动点「启动」确认能正常访问页面、日志没有报错再回容器详情里把重启策略改成 always重启一次容器确认生效。另外还要区分两个概念容器的重启策略管的是容器Alist 内部挂载的网盘凭据过期不归它管。阿里云盘的刷新令牌、115 的 Cookie 失效时容器照样跑得好好的只是存储列表里那个挂载点变红。这个后面第 5 章会展开。容器创建路径上还有个小细节原文特意强调「alist 这个容器只要修改存储空间、端口设置这两个地方其他的都不用管但是其他容器就不一样了」。这句话对新手是对的但要知道为什么——Alist 不需要额外环境变量就能跑监听端口和默认路径都编译进镜像了。你以后装别的镜像环境变量、时区、健康检查这些基本都得看文档填不能拿这套流程套所有容器。3.3 初始密码日志里那行 password 在哪容器创建完成回「容器管理」找到alist点「启动」。等几秒点「快捷方式」在桌面建个入口或者直接在局域网浏览器里敲NAS的IP:5244。页面能打开说明前面的端口和容器状态都对。接下来卡人的是登录——Alist 首次启动会随机生成一个admin的初始密码写在容器日志里页面上不显示。操作路径是容器管理里点alist这一行的「详情」上方切到「日志」往下滑找含password的那一行把冒号后面的字符串复制出来。默认用户名是admin。日志滚动快的时候手动滑很费劲SSH 一条命令更省事# 从容器日志里过滤出初始密码那一行-i 忽略大小写 docker logs alist 21 | grep -i passworddocker logs默认只输出 stdout加21把 stderr 也合进来否则有些版本会漏。grep -i忽略大小写日志里password和Password两种写法都出现过。如果日志已经滚过去了或者你手滑改错密码登不进去别重建容器用容器自带的 admin 子命令重置# 随机生成一个新密码并打印出来 docker exec -it alist ./alist admin random # 或者直接指定一个新密码更省事 docker exec -it alist ./alist admin set 你的新密码docker exec -it进容器执行一次性命令alist是容器名./alist是容器工作目录/opt/alist下的可执行文件。这两条命令只改数据库里的管理员密码不动挂载配置比删容器重建安全得多。登录进去之后左侧「用户」页面里把admin的密码再改一遍顺便把下面几个guest账号的密码也改掉——默认 guest 的密码是公开的局域网里谁都能看你的网盘列表。4. 挂载网盘阿里云盘刷新令牌与 115 Cookie 两种凭据4.1 阿里云盘除了刷新令牌其余基本照抄登录进去之后点左侧「存储」上方「添加」。驱动选阿里云盘对应的那一项页面会展开一组字段。原文说「除了刷新令牌其他都照抄即可」这句是整个挂载环节的关键我把字段逐个列出来照着填字段填写值说明驱动阿里云盘Open 版优先两种驱动授权方式不同选文档里标注仍在维护的那个挂载路径/aliyun前面必须带斜杠这是网页上显示的目录名排序0多个盘按 0、1、2 排决定侧边栏顺序根文件夹IDroot只挂某个子目录时改成对应目录 ID刷新令牌粘贴你拿到的 token唯一需要自己动手搞的字段移除方式回收站网页上删文件时进网盘回收站比直接删安全刷新令牌的获取方式Alist 项目文档里有专门的授权页流程是登录你的网盘账号、同意授权、从回调页面里把 token 整段复制出来。注意是整段中间不能断行、不能多空格粘的时候用纯文本粘贴别用带格式的。最容易出错的一步是把 token 复制短了。那个字符串动辄几百个字符微信、备忘录中转一次就可能被截断。我一般直接在授权页面全选复制粘到 Alist 输入框里再对比一下首尾几个字符。保存之后存储列表里这一项的状态会变成「工作」。点进「文件」页面左侧应该能看到aliyun这个目录点开能列出网盘里的文件就算挂载成功。这里补一句判断依据如果状态显示「错误」把鼠标悬停在状态上会给出具体报错常见的是invalid refresh token和failed to get root id。前者是 token 不对或已失效重新授权后者多半是根文件夹ID 填错了改回root再试。4.2 115 网盘F12 抓 Cookie 的动作和失效判断115 的挂载走的是另一套凭据——Cookie。原文的步骤是打开 115 网盘网页版按 F12再按 F5 刷新页面从网络请求里复制 Cookie 值。这个动作看着简单细节没做对就是白抓。具体是这样浏览器登录 115 网页版按 F12 打开开发者工具切到「网络 / Network」标签然后按 F5 刷新页面。此时列表里会出现一堆请求随便点其中一条主文档请求右侧找到「请求标头 / Request Headers」里面有一行Cookie:把冒号后面整段复制出来。几个必须注意的点先开 F12 再刷新顺序反了列表可能是空的。抓的时候用无痕窗口登录避免和你日常浏览器的其他会话混在一起也方便抓完直接关掉。整段 Cookie 很长包含多个键值对用分号分隔少一段都可能认证失败。不要用浏览器插件导出的 Cookie 去替代格式经常对不上。回到 Alist 存储页面驱动选 115 网盘对应的那一项挂载路径自己填比如/115Cookie 字段粘贴刚才那一整段根文件夹ID 按文档默认值填保存。状态变「工作」之后再点进去看文件列表。这里有个隐性坑Cookie 抓取当下能用过几天网盘那边会话过期Alist 里的挂载就会变成「错误」但容器本身毫无异常。这种情况不是装错了是凭据到期重新抓一次 Cookie、在存储编辑页里替换掉旧值、保存即可不用删了重建。新版 Alist 的 115 驱动还支持扫码登录省掉抓 Cookie 这一步凭据由程序自己维护刷新。如果你的版本里有这个选项优先用扫码长期挂载省心得多。4.3 挂载路径命名多盘并存时先定规矩原文最后一句「其他云盘挂载方式和 115 类似」意味着你迟早会挂第三个、第四个盘。这时候挂载路径的命名就值得提前规划否则文件页面里一堆新建文件夹、盘1、test自己都记不清哪个是哪个。我的习惯是全部用小写英文加短横线按来源分/aliyun、/115、/quark、/onedrive-work。好处有三个URL 里不会出现需要转义的中文和空格WebDAV 客户端挂载时路径好写以后写脚本批量操作不会因为编码问题翻车。挂载路径里带空格或中文短期内可能看不出问题等到你用播放器、下载器去读这些目录时就会遇到路径解析失败、文件名乱码这类玄学问题。改起来又得挨个客户端重配不如一开始就定死。同时挂多个盘还有个小技巧把最常用的那个盘的排序设为 0其余递增。文件页面左侧目录是按排序值排的常用的排最上面每天少点几次。5. 排查绿联 Docker 装 Alist 最容易翻车的 5 个地方5.1 镜像下载一直不动或者干脆报错现象本地镜像列表里点「添加」之后进度条长时间停在某个百分比或者弹窗直接报拉取失败重试几次都一样。原因镜像仓库在境外某些时段拉取会明显变慢甚至中断另一种情况是 Docker 所在的那块盘剩余空间不足拉取到一半写不进去。解决先看盘。SSH 里df -h确认 Docker 所在卷至少留几个 GB。空间够就取消重来换个时间段再试。反复失败的话改用命令行docker pull xhofe/alist:v3命令行能看到具体卡在哪一层比图形界面的进度条信息量大。如果手上有别人导出的镜像 tar 包也可以用docker load -i导入绕开拉取环节。5.2 容器状态是「运行中」但浏览器打不开页面现象docker ps显示容器 Up浏览器访问NAS的IP:5244转圈然后超时或者直接连接被拒绝。原因三种可能——本地端口没映射上端口设置那一栏空着就点了下一步、本地端口填了但容器端口填错、或者你访问的 IP 根本不是 NAS 的当前地址DHCP 重新分配过。解决先ss -lntp | grep :5244看端口在不在监听没输出就是没映射上回容器详情改端口配置后重启容器。有输出但还是打不开就在 NAS 本机上curl -I http://127.0.0.1:5244试一次本机能通说明是网络地址的问题去路由器里确认 NAS 的 IP。日志里如果有listen tcp :5244: bind: address already in use就是端口冲突换本地端口。5.3 重启 NAS 之后挂载的网盘全没了现象装完当天一切正常NAS 重启或者容器重建之后登录进去发现存储列表是空的得重新挂一遍。原因存储空间映射的位置不对。映射到了/Docker/alist而不是/Docker/alist/data或者映射对了但权限是只读容器写不进数据库文件配置只存在容器内部临时层里容器一重建就清零。解决按 2.3 那条docker inspect命令复核挂载的 Source 和 Destinationrwtrue必须为真。不对就删容器重建源目录精确到data面板里把「只读」切成「读写」。重建之后重新挂一次网盘再重启一次容器确认配置还在才算真的修好。5.4 日志里翻不到 password 那一行现象点开容器日志从头滑到尾也没看到password或者看到的时候已经滚过去了。原因容器刚启动时日志输出很快图形界面的日志窗口默认只保留最近若干行早期输出被挤掉了另一种可能是你之前已经改过密码初始密码那行只在首次初始化时打印一次。解决用docker logs alist 21 | grep -i password全量过滤比在界面上滑准确。还是没有就直接docker exec -it alist ./alist admin set 新密码强制指定这条命令不依赖日志任何时候都能用。改完立刻用新密码登录别再纠结原来那个。5.5 网盘挂载状态显示「错误」但容器一切正常现象容器 Up、页面能开、其他盘正常就某一个挂载点状态是「错误」点进去列不出文件。原因凭据问题占九成。阿里云盘的刷新令牌过期或被重新授权覆盖115 的 Cookie 会话失效都会表现成这样。剩下一成是根文件夹ID 填了一个不存在或者无权限的目录。解决把鼠标悬停在「错误」上看具体报错。invalid refresh token、cookie 已失效这类直接重新获取凭据在存储编辑页里替换旧值保存不用重建容器。报错提到找不到目录就把根文件夹ID 改回默认的root或0再试。改完刷新页面看状态还红就看一下容器日志里对应时间点的报错那里通常有更细的原因。6. 装完怎么验证三步确认 Alist 真的读写通了页面能打开、能登录只说明容器跑起来了离「装好」还差一截。我一般按下面三步走全程三分钟能把绝大多数隐性故障在挂第二个盘之前挖出来。# 第一步容器是不是真的在跑端口映射对不对 docker ps --filter namealist --format table {{.Names}}\t{{.Status}}\t{{.Ports}} # 第二步从 NAS 本机探一下 HTTP 服务看返回码是不是 200 curl -sS -o /dev/null -w %{http_code}\n http://127.0.0.1:5244/ # 第三步挂载点是否落在 data 目录上、是否可写 docker inspect alist --format {{range .Mounts}}{{.Source}} - {{.Destination}} (rw{{.RW}}){{\n}}{{end}}第一步的--filter namealist只列这一个容器{{.Ports}}会显示成0.0.0.0:5244-5244/tcp箭头左边是宿主端口、右边是容器端口两边都得是 5244或者你自定义的宿主端口对 5244。第二步的-o /dev/null丢掉响应体、-w %{http_code}只打印状态码返回200说明 HTTP 层通了返回000是连接都没建立回第 5 章 5.2 排查。第三步的输出必须是一行、目标路径以/opt/alist/data结尾、rwtrue。三步都过了再进网页做实际读写验证这一步图形界面骗不了人验证项操作期望结果不符合时先看哪里挂载列表左侧「存储」页面状态列全部显示「工作」状态悬停提示再翻容器日志目录读取「文件」页点开每个挂载目录能列出网盘里的真实文件根文件夹ID 是否填错写入在挂载目录里新建一个空 txt网盘网页版能同步看到该网盘的写权限、空间是否满持久化docker restart alist后重新登录账号密码、存储列表原样还在回第 5 章 5.3 查挂载路径「写入」这一项最容易被跳过也最能暴露问题。有些盘能读不能写或者写到一半失败光看状态是「工作」是发现不了的必须实际建个文件再去网盘网页版确认一次。最后那个docker restart alist建议每次装完都跑一遍。重启之后再登录如果账号密码还是你改过的那个、存储列表一个不少、每个挂载点状态还是「工作」这套环境才算真的立住了。至于局域网访问、反向代理、WebDAV 挂到播放器这些都是在这个基础上往上叠底座不稳上面全是白搭。从那以后我每次在 NAS 上装完 Alist都会先docker restart再刷一遍页面确认存储列表原样还在才去挂第二个盘——省的是半夜发现配置全丢、满屏日志找不到原因的那两个小时。希望帮到你。本文还有配套的精品资源点击获取