使用 Docker 和 Rclone 挂载 Alist 存储:从入门到精通的全方位指南
场景需求
通过 Docker 容器运行 Rclone,将 Alist 网盘存储挂载为本地目录,实现以下目标:
- 持久化挂载 WebDAV 存储
- 通过 docker-compose 管理服务
- 支持宿主机直接访问挂载点
准备工作
环境要求
- 操作系统:Linux 系统(推荐 CentOS 7.8 或 Ubuntu 20.04+)
- Docker 版本:20.10.18+
- docker-compose 版本:2.10+
- Alist 服务:已部署并获取 WebDAV 地址和凭证
目录结构
mkdir -p ~/rclone-alist/{config,mnt} # 推荐项目目录结构
实施步骤
1. 创建共享挂载点(关键步骤)
# 创建物理挂载点
sudo mkdir -p /opt/alist_mnt
sudo chmod 777 /opt/alist_mnt
# 设置绑定挂载(解决 Docker 挂载传播问题)
sudo mount --bind /opt/alist_mnt /opt/alist_mnt
sudo mount --make-shared /opt/alist_mnt # 启用共享挂载
📌 技术说明:
--make-shared
确保挂载点能在容器间传播,避免出现mount.none
不可用问题。
2. 生成 Rclone 配置文件
运行临时容器生成配置:
docker run -it --rm \
-v "$HOME/rclone-alist/config":/config/rclone \
--cap-add SYS_ADMIN \
--device /dev/fuse \
--security-opt apparmor:unconfined \
rclone/rclone:latest config
配置流程示例:
- 选择新建远程存储(
n
),命名为alist
。 - 选择存储类型为 WebDAV(
56
)。 - 输入 Alist 的 WebDAV URL(如
http://192.168.1.200:5244/dav
)。 - 选择
Other
作为 WebDAV 供应商。 - 输入 Alist 的用户名和密码。
- 保存配置并退出。
验证配置文件:
cat ~/rclone-alist/config/rclone.conf
确保配置文件包含以下内容:
[alist]
type = webdav
url = http://192.168.1.200:5244/dav
vendor = other
user = admin
pass = TY8JqGS8aMoeyZmCJnvemevdin0h0wxbPUbS
3. 通过 Docker 挂载
docker run -d \
--name=rclone \
-v /opt/mnt:/mnt:rshared \
-v ~/rclone-alist/config/rclone.conf:/config/rclone/rclone.conf \
--cap-add SYS_ADMIN \
--device /dev/fuse \
--security-opt apparmor:unconfined \
rclone/rclone:latest \
mount alist:/ /mnt \
--allow-other \
--vfs-cache-mode writes \
--allow-non-empty \
--log-level DEBUG # 选填
关键参数说明:
rshared
:挂载传播设置为递归共享。security_opt
:禁用 AppArmor 配置。cap_add
:添加系统管理权限。
查看实时日志:
docker logs -f rclone
验证与测试
容器内验证
docker exec -it rclone ls /mnt
宿主机验证
ls /opt/alist_mnt
echo "test" | sudo tee /opt/alist_mnt/testfile.txt
调试命令
# 查看挂载详情
docker exec rclone mount | grep /mnt
# 检查进程状态
docker exec rclone ps aux | grep rclone
高级配置技巧
性能优化参数
在 command
部分添加:
- --buffer-size=256M
- --vfs-read-chunk-size=128M
- --vfs-read-chunk-size-limit=1G
- --vfs-cache-max-age=24h
开机自动挂载
编辑 /etc/fstab
添加:
/opt/alist_mnt /opt/alist_mnt none bind,shared 0 0
安全加固方案
environment:
- RCLONE_CONFIG_PASS=your_encryption_password # 配置文件加密
故障排查指南
现象 | 解决方案 |
---|---|
挂载点为空 | 检查 Alist WebDAV 路径是否正确 |
Permission denied | 添加 --allow-other 参数 |
fuse: device not found | 确保启用 --device /dev/fuse |
频繁断连 | 增加 --daemon-timeout=30m 参数 |
【进阶】docker-compose 部署
创建挂载目录
sudo mkdir -p /opt/mnt
sudo mount --bind /opt/mnt /opt/mnt
sudo mount --make-shared /opt/mnt
创建 docker-compose.yml
version: '3.8'
services:
alist:
image: xhofe/alist:latest
container_name: alist
restart: unless-stopped
volumes:
- /opt/docker/alist/data:/opt/alist/data
- ./alist/volumes:/mnt
ports:
- "5244:5244"
environment:
- PUID=0
- PGID=0
- UMASK=022
command: server --no-prefix
rclone:
image: rclone/rclone:latest
container_name: rclone
restart: unless-stopped
depends_on:
- alist
volumes:
- /opt/mnt:/mnt:rshared
- ./rclone/config:/config/rclone
devices:
- /dev/fuse
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
command: >
mount alist:/ /mnt
--allow-other
--vfs-cache-mode writes
--allow-non-empty
--log-level DEBUG
volumes:
alist-data:
rclone-config:
使用说明
-
准备目录结构:
mkdir -p {./alist/data,./rclone/config} && sudo mkdir -p /opt/mnt
-
设置共享挂载(只需执行一次):
sudo mount --bind /opt/mnt /opt/mnt && sudo mount --make-shared /opt/mnt
-
配置 Rclone:
cat > ./rclone/config/rclone.conf <<EOF [alist] type = webdav url = http://alist:5244/dav vendor = other user = admin pass = $(alist password) # 替换为实际密码 EOF
-
启动服务:
docker compose up -d
验证方法
-
检查 Alist 是否运行:
curl http://localhost:5244
-
查看 Rclone 日志:
docker logs rclone | grep -i "mount"
-
验证宿主机挂载点:
ls /opt/mnt # 应该看到 Alist 中的文件
-
检查容器内挂载点:
docker exec rclone ls /mnt
常见问题处理
-
挂载目录为空:
- 确认已执行
mount --make-shared
。 - 检查 rclone.conf 中的密码是否正确。
- 增加
--log-level DEBUG
查看详细错误。
- 确认已执行
-
权限问题:
sudo chmod -R 777 /opt/mnt # 临时调试用
-
更新配置:
docker compose restart rclone
-
开机自动创建挂载点
sudo tee /etc/systemd/system/cloud-mount.service <<EOF
[Unit]
Description=Persistent mount binding
[Service]
Type=oneshot
ExecStart=/bin/mount --bind /opt/alist_mnt /opt/alist_mnt
ExecStart=/bin/mount --make-shared /opt/alist_mnt
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload && sudo systemctl enable --now cloud-mount
通过本方案可实现:
✅ 容器化隔离部署
✅ 配置版本化管理
✅ 快速水平扩展
✅ 挂载状态监控
建议搭配 systemd
或 supervisord
实现服务保活,生产环境建议启用 TLS 加密 WebDAV 连接。