在Docker /Systemd 上rclone的挂载指南,以minio为例

以下是使用 Docker 和 systemd 两种方法挂载 Rclone 文件系统的详细指南,结合 MinIO 对象存储的配置示例:


一、通过 systemd 挂载 Rclone 文件系统

1. 创建 Rclone 配置文件

ini 复制代码
# /root/.config/rclone/rclone-minio.conf
[minio]
type = s3
provider = Minio
access_key_id = <Access Key>
secret_access_key = <Secret Key>
endpoint = http://<对象存储网址>:<对象存储端口>/

2. 创建 systemd 服务文件

bash 复制代码
sudo nano /etc/systemd/system/rclone-minio.service
ini 复制代码
[Unit]
Description=Mount minio using rclone
After=network-online.target docker.service

[Service]
Type=forking
ExecStartPre=/usr/bin/mkdir -pv /mnt/rclone/minio
ExecStart=/usr/bin/rclone mount minio: /mnt/rclone/minio \
  --config /root/.config/rclone/rclone-minio.conf \
  --header "Referer:" \
  --multi-thread-streams 4 \
  --buffer-size 512M \
  --vfs-fast-fingerprint \
  --vfs-cache-mode full \
  --no-modtime \
  --file-perms 0777 \
  --copy-links \
  --allow-other \
  --allow-non-empty \
  --umask 000 \
  --daemon \
  --cache-dir /root/rclone-cache

ExecStop=/bin/fusermount -u /mnt/rclone/minio
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

3. 启用并启动服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable rclone-minio
sudo systemctl start rclone-minio

二、通过 Docker 挂载 Rclone 文件系统

1. 使用 Docker Compose 配置

yaml 复制代码
version: "3.6"
services:
  mount-minio:
    entrypoint:
      - "sh"
      - "-c"
    image: mumiehub/rclone-mount
    container_name: "mount-minio"
    command: 
      - "/usr/local/sbin/rclone -v --config /config/rclone-minio.conf mount minio: /media/docker/volume/minio --allow-other --allow-non-empty --header Referer: --multi-thread-streams 4 --buffer-size 512M --vfs-fast-fingerprint --vfs-cache-mode full --no-modtime --file-perms 0777 --copy-links --dir-cache-time 48h --poll-interval 5m --umask 000"
    cap_add:
      - SYS_ADMIN
    devices:
      - "/dev/fuse:/dev/fuse"
    environment:
      - ConfigName=rclone-minio.conf
      - MountPoint=/media/docker/volume/minio
      - RemotePath=minio:
    hostname: "debian-msx-20k6a00dcd"
    ipc: "private"
    logging:
      driver: "json-file"
      options:
        max-file: "3"
        max-size: "10m"
    network_mode: "host"
    privileged: true
    restart: "always"
    security_opt:
      - apparmor:unconfined
      - label=disable
    stdin_open: true
    tty: true
    volumes:
      - /media/docker/volume/minio:/media/docker/volume/minio:rw,rshared
      - /root/.config/rclone:/config
    working_dir: "/"

2. 启动容器

bash 复制代码
docker-compose up -d

3. 验证挂载

bash 复制代码
# 查看挂载状态
df -h | grep minio

# 卸载命令(需谨慎使用)
sudo fusermount -u -z /media/docker/volume/minio

三、关键参数说明

  1. --vfs-cache-mode full:启用完整缓存模式,提升读写性能
  2. --allow-other:允许非 root 用户访问挂载目录
  3. --buffer-size 512M:设置 512MB 缓冲区优化大文件传输
  4. network_mode: host:Docker 容器直接使用宿主机网络

四、常见问题处理

  1. 权限问题 :确保容器有 SYS_ADMIN 能力和 /dev/fuse 设备访问权限
  2. 挂载失败:检查 Rclone 配置文件的 endpoint 和密钥是否正确
  3. 性能优化 :调整 --multi-thread-streams--buffer-size 参数

通过以上两种方法,可灵活选择 systemd 系统级挂载或 Docker 容器化方案实现 Rclone 文件系统的持久化挂载。

相关推荐
努力搬砖的咸鱼9 小时前
容器之间怎么通信?Docker 网络全解析
网络·docker·云原生·容器
liming49511 小时前
Ubuntu18.04部署k8s
云原生·容器·kubernetes
元直数字电路验证13 小时前
ASP.NET Core Web APP(MVC)开发中无法全局配置 NuGet 包,该怎么解?
前端·javascript·ui·docker·asp.net·.net
YC运维13 小时前
Kubernetes资源管理全解析
java·容器·kubernetes
chinesegf14 小时前
Docker篇6-项目app.py和flask_app.service配置和映射到docker中
docker·容器·flask
退役小学生呀15 小时前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
维尔切15 小时前
搭建 k8s
云原生·容器·kubernetes
hwj运维之路15 小时前
《Kubernetes面试题汇总系列》
云原生·容器·kubernetes
闲人编程15 小时前
Docker化你的Python应用:从开发到生产
python·docker·eureka·开发·生产·codecapsule
JavaLearnerZGQ16 小时前
配置Docker镜像源
运维·docker·容器