【全网最全】使用 Docker 和 Rclone 挂载 Alist 存储:从入门到精通的全方位指南

使用 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

配置流程示例:

  1. 选择新建远程存储(n),命名为 alist
  2. 选择存储类型为 WebDAV(56)。
  3. 输入 Alist 的 WebDAV URL(如 http://192.168.1.200:5244/dav)。
  4. 选择 Other 作为 WebDAV 供应商。
  5. 输入 Alist 的用户名和密码。
  6. 保存配置并退出。

验证配置文件:

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:

使用说明

  1. 准备目录结构

    mkdir -p {./alist/data,./rclone/config} && sudo mkdir -p /opt/mnt
    
  2. 设置共享挂载(只需执行一次):

    sudo mount --bind /opt/mnt /opt/mnt && sudo mount --make-shared /opt/mnt
    
  3. 配置 Rclone

    cat > ./rclone/config/rclone.conf <<EOF  
    [alist]  
    type = webdav  
    url = http://alist:5244/dav  
    vendor = other  
    user = admin  
    pass = $(alist password)  # 替换为实际密码  
    EOF
    
  4. 启动服务

    docker compose up -d
    

验证方法

  1. 检查 Alist 是否运行:

    curl http://localhost:5244
    
  2. 查看 Rclone 日志:

    docker logs rclone | grep -i "mount"
    
  3. 验证宿主机挂载点:

    ls /opt/mnt  # 应该看到 Alist 中的文件
    
  4. 检查容器内挂载点:

    docker exec rclone ls /mnt
    

常见问题处理

  1. 挂载目录为空

    • 确认已执行 mount --make-shared
    • 检查 rclone.conf 中的密码是否正确。
    • 增加 --log-level DEBUG 查看详细错误。
  2. 权限问题

    sudo chmod -R 777 /opt/mnt  # 临时调试用
    
  3. 更新配置

    docker compose restart rclone
    
  4. 开机自动创建挂载点

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

通过本方案可实现:
✅ 容器化隔离部署
✅ 配置版本化管理
✅ 快速水平扩展
✅ 挂载状态监控

建议搭配 systemdsupervisord 实现服务保活,生产环境建议启用 TLS 加密 WebDAV 连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿谷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值