前言
Portainer 负责容器参数,应用挂载出来的配置文件使用 FileBrowser 编辑。本文记录目录映射、网页编辑和实际遇到的文件权限问题。
截至 2026 年 9 月,原 FileBrowser 项目已归档,停止提供后续修复。这里保留现有部署与权限处理的记录,入口限于管理内网,保持命令执行功能关闭;新建环境选择文件管理工具时需要考虑这个维护状态,见 项目说明。
一、环境与目录规划
基础环境见 NAS 折腾日记(2)PVE 与 Docker 基础环境部署,管理入口见 NAS 折腾日记(3)Portainer 部署与容器管理。以下目录和 IP 为统一示例,命令在 Docker LXC 中执行。
| 内容 | LXC 目录 | 容器目录 |
|---|---|---|
| 可编辑的应用配置 | /srv/appdata |
/srv |
| FileBrowser 设置 | /srv/appdata/filebrowser/config |
/config |
| FileBrowser 数据库 | /srv/appdata/filebrowser/database |
/database |
FileBrowser 使用 UID/GID 1000:1000。先准备本篇的新目录:
bash123456mkdir -p /srv/appdata/filebrowser/config /srv/appdata/filebrowser/database mkdir -p /srv/appdata/homepage/config chown 1000:1000 /srv/appdata chown -R 1000:1000 /srv/appdata/filebrowser /srv/appdata/homepage chmod 750 /srv/appdata chmod -R u+rwX,g+rX,o-rwx /srv/appdata/filebrowser /srv/appdata/homepage
二、创建容器
先在 Docker LXC 创建 /srv/appdata/filebrowser/config/settings.json:
json12345678{ "port": 80, "baseURL": "", "address": "0.0.0.0", "log": "stdout", "database": "/database/filebrowser.db", "root": "/srv" }
设置文件属主:
bash12chown 1000:1000 /srv/appdata/filebrowser/config/settings.json chmod 640 /srv/appdata/filebrowser/config/settings.json
Portainer 中点击 Add container,填写:
| 位置 | 参数 |
|---|---|
| Name | filebrowser |
| Image | filebrowser/filebrowser:latest |
| Manual network port publishing | Host 8081 → Container 80,TCP |
| Advanced container settings → Command & logging | User 填 1000:1000 |
| Restart policy | Unless stopped |
在 Volumes 添加三个 Bind:
| Host | Container |
|---|---|
/srv/appdata/filebrowser/config |
/config |
/srv/appdata/filebrowser/database |
/database |
/srv/appdata |
/srv |
点击 Deploy the container,进入 Logs 查看初始化结果。新版本会在首次初始化日志中给出随机管理员密码,按日志提示登录 http://192.168.20.30:8081,随后设置自己的密码。
本例把整棵 /srv/appdata 交给维护者编辑,其中可能包含应用凭据;FileBrowser 管理员应由同一位服务维护者担任。普通文件共享账号应单独设置 scope,不能沿用这个管理范围。
登录后能看到 homepage、filebrowser 等目录。打开一个测试配置文件并保存,确认读写权限正常。若出现 Permission denied,在 LXC 中执行:
bash123ls -ldn /srv/appdata /srv/appdata/homepage/config ls -ln /srv/appdata/filebrowser/config/settings.json docker top filebrowser
本例进程使用 1000:1000,目录和文件也应给这个身份相应权限。之前遇到的 775 仍无法写入,就是还需要对照属主、所属组和进程身份。
三、验证配置编辑
登录后进入 homepage/config,新建 test.txt,填写一行文字并保存。在 LXC 中确认文件存在及数字属主:
bash12cat /srv/appdata/homepage/config/test.txt ls -ln /srv/appdata/homepage/config/test.txt
网页内的 / 对应容器 /srv,也就是 LXC 的 /srv/appdata。看到的相对目录为 homepage/config,应用配置中引用的宿主目录仍是 /srv/appdata/homepage/config。
四、处理文件权限
此前遇到的问题是 /config/settings.json 写入失败。目录模式调整为 775 后仍然报错,原因涉及 root 属主与 FileBrowser 进程身份。目录的写权限、已有文件的写权限以及祖先目录的执行权限都需要对应。
bash123# 针对报错文件逐级查看 ls -ldn /srv /srv/appdata /srv/appdata/filebrowser /srv/appdata/filebrowser/config ls -ln /srv/appdata/filebrowser/config/settings.json
对于本篇由 FileBrowser 管理的设置文件,修正为:
bash12chown 1000:1000 /srv/appdata/filebrowser/config/settings.json chmod 640 /srv/appdata/filebrowser/config/settings.json
其他应用有自己的运行身份,先查该镜像对 PUID/PGID 或 User 的支持,再决定属主。将整棵应用目录递归改成同一用户,可能影响原服务数据库等文件,因此权限调整按具体目录进行。
Alpine 可以用以下命令创建对应的本地账号;若数字 ID 已存在,使用已有账号即可:
bash123# 新建环境中的可选命名,数字 ID 与容器保持一致 addgroup -g 1000 appfiles adduser -D -H -u 1000 -G appfiles appfiles
五、更新与备份
在 Portainer 停止 FileBrowser 后,备份配置与数据库:
bash1234mkdir -p /srv/backups docker stop filebrowser tar -czf /srv/backups/filebrowser-backup.tar.gz -C /srv/appdata filebrowser docker start filebrowser
更新时保留 /config、/database、/srv 三个映射和 User,使用 Duplicate/Edit 调整镜像后部署。重新登录,检查原账号、文件列表和文件编辑。应用配置目录中的其他内容属于各自服务的备份范围。
Homepage 篇会给 Homepage 设置相同的 PUID/PGID=1000:1000,使它生成的配置也能继续由 FileBrowser 编辑,并补充 FileBrowser 的空间用量组件。
参考
支付宝
微信