
在寻找轻量级、支持 WebDAV、且界面现代化的文件服务器时,Dufs 无疑是一个非常棒的选择。它单文件部署、资源占用极低。
但在使用 Docker Compose 部署时,很多小伙伴(包括我自己)都会遇到一个怪现象:明明开启了所有权限,为什么登录后还是不能上传文件?
本文将总结 Dufs 的部署方案,并着重讲解如何配置“公开模式”与“私有用户模式”,以及那个关键的“权限后缀”问题。
Dufs 是一个用 Rust 编写的功能强大的文件服务器,支持:
首先,创建一个 docker-compose.yml 文件。这是最基础的版本,默认是只读的。
yamlversion: '3'
services:
dufs:
image: sigoden/dufs:latest
container_name: dufs
ports:
- 5032:5000
volumes:
- ./data:/data
command: /data
如果你是在内网环境,或者想做一个公开的临时文件中转站,允许任何人查看、上传、删除文件。
配置要点:
-A (即 --allow-all) 参数开启所有权限。yaml # ... 其他配置同上
# -A 代表开启上传、删除、搜索等所有功能
command: /data -A
注意:这会允许匿名用户随意删除文件,请慎用于公网环境。
这是最容易出问题的地方。我们的需求通常是:只有管理员(我)登录后才能上传/删除,其他人要么进不来,要么只能看。
很多教程或者直觉会让我们这样写:
yamlcommand: /data -A -a admin:password@/
现象:你能看到登录框,密码也正确,但登录进去后没有上传按钮,只有下载权限。
原因:Dufs 的权限逻辑是,一旦你指定了 -a (Auth) 规则,默认给予的是只读权限。即使你加了 -A (Allow All),这个特定的用户规则如果没有显式声明“可写”,它依然被锁定在只读状态。
要赋予用户完全控制权,必须在路径后面加上 :rw (Read/Write)。
同时,为了避免 Docker 解析 YAML 时对特殊字符(如 @, :, 字符串顺序)的误读,强烈建议使用 JSON 数组格式来编写 command。
yamlversion: '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: 赋予读写权限(这是出现上传按钮的关键)。-A -a ... 当作一个长字符串处理,确保每个参数都被 Dufs 正确识别。部署 Dufs 时,如果发现配置不生效或权限不对,请检查以下三点:
docker-compose.yml 后必须执行“重新构建” (Rebuild/Up),光重启容器是不够的。:rw 吗? 设置用户时,必须显式授予写权限 (user:pass@path:rw)。/data 放在最后,并使用数组格式编写 command。希望这篇笔记能帮大家愉快地使用 Dufs!

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