在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 文件系统的持久化挂载。

相关推荐
云川之下18 小时前
【k8s】NAD(NetworkAttachmentDefinition)与SR‑IOV‑Operator 关系
云原生·容器·kubernetes
张龙68718 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
ERD Online20 小时前
docker-compose 一键部署的 MIT 开源数据库建模平台
数据库·docker·开源
ZzzZZzzzZZZzzzz…21 小时前
K8S实战:NFS+StorageClass+PV/PVC+Deployment
运维·云原生·容器·kubernetes·storageclass·linux运维·持久卷
三言老师21 小时前
CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留
docker·容器·kubernetes
circuitsosk21 小时前
从Docker到Kubernetes:AI应用服务化与弹性伸缩的落地实践
人工智能·docker·kubernetes·ai应用部署
showyoui1 天前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
云川之下1 天前
【k8s】sriov‑device‑plugin、sriov‑network‑config‑daemon详解
云原生·容器·kubernetes
golang学习记2 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
张忠琳2 天前
【NPU】Ascend Device Plugin —Part 6 K8s客户端 + 重复检测模块 超深度源码分析之二
云原生·容器·kubernetes·npu·docker device