OpenWrt/iStoreOS Docker 安装 CloudDrive2:扩容、挂载与启动
本文适用于已启用 Docker 的 OpenWrt/iStoreOS。流程是:确认持久化空间 → 检查 FUSE → 设置共享挂载 → 创建容器 → 在网页中添加云盘并验证。截图为既有界面示例,固件菜单可能不同;本文未逐款路由器实机测试。
OpenWrt 通常由 procd 管理服务,应按 CloudDrive2 官方指南中的“非 systemd”分支处理挂载。/etc/systemd/system/docker.service.d/ 不是本教程的配置位置。镜像与参数参考 CloudDrive2 官方 Docker 部署指南。
不熟悉镜像和容器时,可先查看 Docker 是什么及如何安装。
扩容 Docker 存储空间
先检查 Docker 数据目录与磁盘容量,不能仅凭 /opt 目录存在就认定 Docker 已扩容:
sh
docker info --format '{{.DockerRootDir}}'
df -hDocker 镜像存储与 CloudDrive2 的配置目录是两件事。本文把配置与云盘挂载目录放在 /opt/clouddrive,前提是 /opt 已挂载到足够大的持久化磁盘。若空间足够,跳过分区步骤。已有 Docker 数据需要迁移时,应先停止相关容器、备份数据,再按当前固件的 Docker 数据目录设置迁移;不要直接在非空 /opt 上覆盖挂载。
创建分区或者添加新分区
本节仅适用于确认无数据的新磁盘。先用 fdisk -l 核对型号、容量、已有分区与系统盘;不要格式化系统盘或已有数据的分区。以下假定新磁盘为 /dev/sdb,实际设备名必须自行核实。
sh
fdisk -l确认目标后再运行 fdisk /dev/sdb:用 p 查看分区表,按提示创建新分区;写入前再次确认目标和结果,最后用 w 保存。只有新建的 /dev/sdb1 确认没有需要保留的数据时,才格式化:
sh
mkfs.ext4 /dev/sdb1

在“系统 → 挂载点”按分区 UUID 配置持久化挂载,目录填 /opt,文件系统选 ext4,启用后保存应用。

重启后用 df -h /opt 确认它来自预期磁盘,而非路由器原来的根文件系统;再次核对 Docker 数据目录所在分区。

通过 Docker 部署 CloudDrive2
通过 SSH 登录路由器,按固件版本安装 FUSE3 用户工具和匹配内核的 FUSE 支持,再检查:
sh
command -v fusermount3
ls -l /dev/fuse
docker info缺少 fusermount3、/dev/fuse 或 Docker 无法连接时先处理对应组件,不要继续创建容器。精简固件的 mount 若不支持 --make-shared,需安装该固件仓库提供的完整 mount 工具。
查找挂载点目录
sh
df -h /opt
findmnt -o TARGET,SOURCE,FSTYPE,PROPAGATION /optfindmnt 应显示 /opt 是预期的持久化挂载点。若没有该工具,可查看 /proc/self/mountinfo 中 /opt 对应行及其 shared: 标记;不要照抄其他机器的设备名。

选择一个目录挂载
确认 /opt 已挂载后创建两个独立目录;若传播属性尚非 shared,设置共享挂载:
sh
mkdir -p /opt/clouddrive/shared /opt/clouddrive/Config
mount --make-shared /opt重新检查传播属性。shared 让容器内的云盘挂载能够传播回宿主机;这不是 SMB 共享,也不是文件权限设置。重启后需要在 CloudDrive2 容器启动前重新设置。
拉取 Docker 镜像
使用正常发布镜像,不默认选择 unstable:
sh
docker pull cloudnas/clouddrive2如需指定架构,按官方页面选择 amd64、arm64 或 arm32 标签;拉取报架构不匹配时先核对路由器 CPU 和固件架构。
启动 Docker 容器
以下保留官方的 host 网络、host PID 与 FUSE 参数,并暂时关闭 Docker 自动重启,避免开机时早于共享挂载启动。容器名已存在时先检查原容器,不能重复创建。
sh
docker run -d \
--name clouddrive2 \
--restart no \
--env CLOUDDRIVE_HOME=/Config \
-v /opt/clouddrive/shared:/CloudNAS:shared \
-v /opt/clouddrive/Config:/Config \
--network host \
--pid host \
--privileged \
--device /dev/fuse:/dev/fuse \
cloudnas/clouddrive2/Config 保存账号与应用配置,重建容器时应保留;/CloudNAS 是云盘挂载位置。只有需要管理其他本地目录时,才额外添加官方示例中的 /media 映射。host 网络直接使用宿主机端口,不能再靠 -p 限制访问;管理页仅允许可信 LAN 访问,不要放行到 WAN。
打开 http://路由器局域网IP:19798,按页面完成账号登录、添加云盘,并把云盘挂载到 /CloudNAS 下的子目录。随后检查:
sh
docker ps --filter name=clouddrive2
docker logs --tail 100 clouddrive2
ls -la /opt/clouddrive/shared网页能打开只表示管理服务运行。宿主机应能列出挂载云盘中的已知文件,并读取一个小文件;若网页能浏览而宿主机目录为空,优先查挂载目标、FUSE 与传播属性。
重启、升级与故障恢复
先完成一次手动启动和挂载验证,再配置自动启动。顺序必须是:持久化磁盘挂载完成 → 设置 shared → Docker 可用 → 启动 CloudDrive2 容器。容器保持 --restart no,不要同时配置另一套自动启动。
OpenWrt/iStoreOS 可在“系统 → 启动项 → 本地启动脚本”中、原有 exit 0 之前加入以下示例。它最多等待约 60 秒;未满足条件就记录日志并停止尝试,避免把配置写到未挂载磁盘的目录中。前提仍是本文使用独立的 /opt 挂载点。
sh
(
clouddrive_ready=0
for clouddrive_attempt in $(seq 1 30); do
if awk '$2 == "/opt" { found=1 } END { exit !found }' /proc/mounts \
&& mount --make-shared /opt \
&& docker info >/dev/null 2>&1; then
clouddrive_ready=1
break
fi
sleep 2
done
if [ "$clouddrive_ready" = 1 ]; then
docker start clouddrive2 || logger -t clouddrive2 'Container start failed'
else
logger -t clouddrive2 'Storage or Docker not ready; container was not started'
fi
) &
保存后重启,重复上面的容器日志与宿主机文件读取检查;失败时用 logread 查看启动日志。需要停止服务时执行 docker stop clouddrive2;需要长期停用时同时移除本地启动脚本中的对应片段。
升级前记录当前镜像 ID,停止容器并备份 /opt/clouddrive/Config,再拉取新镜像、使用相同目录与参数重建容器。先验证新版本再清理旧镜像;回退时应使用旧镜像和与其匹配的配置备份,不能把删除配置目录当作修复方法。