编辑
2025-12-06
技术漫谈
00

目录

Docker 部署轻量级文件服务器 Dufs:从入门到权限配置
1\. Dufs 简介
2\. 基础部署 (Docker Compose)
3\. 场景一:公开模式(所有人可读写)
4\. 场景二:私有用户模式(关键避坑点!)
❌ 常见的错误配置
✅ 正确的配置方案
核心参数解析:
5\. 总结

Gemini_Generated_Image_ims35qims35qims3.png

Docker 部署轻量级文件服务器 Dufs:从入门到权限配置

在寻找轻量级、支持 WebDAV、且界面现代化的文件服务器时,Dufs 无疑是一个非常棒的选择。它单文件部署、资源占用极低。

但在使用 Docker Compose 部署时,很多小伙伴(包括我自己)都会遇到一个怪现象:明明开启了所有权限,为什么登录后还是不能上传文件?

本文将总结 Dufs 的部署方案,并着重讲解如何配置“公开模式”与“私有用户模式”,以及那个关键的“权限后缀”问题。

1. Dufs 简介

Dufs 是一个用 Rust 编写的功能强大的文件服务器,支持:

  • 静态文件服务
  • 上传、下载、搜索
  • 访问控制(权限管理)
  • WebDAV 支持
  • 良好的移动端适配

2. 基础部署 (Docker Compose)

首先,创建一个 docker-compose.yml 文件。这是最基础的版本,默认是只读的。

yaml
version: '3' services: dufs: image: sigoden/dufs:latest container_name: dufs ports: - 5032:5000 volumes: - ./data:/data command: /data

3. 场景一:公开模式(所有人可读写)

如果你是在内网环境,或者想做一个公开的临时文件中转站,允许任何人查看、上传、删除文件。

配置要点:

  • 使用 -A (即 --allow-all) 参数开启所有权限。
yaml
# ... 其他配置同上 # -A 代表开启上传、删除、搜索等所有功能 command: /data -A

注意:这会允许匿名用户随意删除文件,请慎用于公网环境。

4. 场景二:私有用户模式(关键避坑点!)

这是最容易出问题的地方。我们的需求通常是:只有管理员(我)登录后才能上传/删除,其他人要么进不来,要么只能看。

❌ 常见的错误配置

很多教程或者直觉会让我们这样写:

yaml
command: /data -A -a admin:password@/

现象:你能看到登录框,密码也正确,但登录进去后没有上传按钮,只有下载权限。 原因:Dufs 的权限逻辑是,一旦你指定了 -a (Auth) 规则,默认给予的是只读权限。即使你加了 -A (Allow All),这个特定的用户规则如果没有显式声明“可写”,它依然被锁定在只读状态。

✅ 正确的配置方案

要赋予用户完全控制权,必须在路径后面加上 :rw (Read/Write)。

同时,为了避免 Docker 解析 YAML 时对特殊字符(如 @, :, 字符串顺序)的误读,强烈建议使用 JSON 数组格式来编写 command

yaml
version: '3' services: dufs: image: sigoden/dufs:latest container_name: dufs ports: - 5032:5000 volumes: - ./data:/data # 请替换为你实际的挂载路径 command: - -A # 1. 开启全局功能开关 - -a # 2. 启用认证 - admin:123456@/:rw # 3. 关键!@/后面加上 :rw 代表根目录读写权限 - /data # 4. 最后指定容器内的数据目录

核心参数解析:

  • -A: 开启服务器的功能支持(允许上传/删除/搜索等接口)。
  • -a: 定义访问控制规则。
  • admin:123456@/:rw:
    • admin:123456: 账号密码。
    • @/: 保护的路径是根目录。
    • :rw: 赋予读写权限(这是出现上传按钮的关键)
  • JSON 数组格式: 避免了 YAML 解析器把 -A -a ... 当作一个长字符串处理,确保每个参数都被 Dufs 正确识别。

5. 总结

部署 Dufs 时,如果发现配置不生效或权限不对,请检查以下三点:

  1. 容器重建了吗? 修改 docker-compose.yml 后必须执行“重新构建” (Rebuild/Up),光重启容器是不够的。
  2. 加了 :rw 吗? 设置用户时,必须显式授予写权限 (user:pass@path:rw)。
  3. 参数顺序对吗? 建议把路径 /data 放在最后,并使用数组格式编写 command。

希望这篇笔记能帮大家愉快地使用 Dufs!

Gemini_Generated_Image_n0v2phn0v2phn0v2.png

本文作者:小转圈

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!