跳转到内容

规划 Docker 应用目录与权限

一个能恢复的应用,至少要保存启动配置、应用数据和版本记录。本站约定使用 <存储空间>/docker/<应用>,其中 <存储空间> 必须替换为你在 NAS 上确认存在的绝对路径。网页共享名称不一定就是 SSH 中的真实路径,先核对再填写。

先用新目录

本文会创建目录并设置应用写入位置。权限修改只应作用于新建的单个应用目录;不要递归修改整个存储空间,不要用 chmod -R 777 修复所有问题。迁移已有数据前先停服务、做独立备份,并保留原路径直到恢复验证完成。

推荐布局

text
<存储空间>/docker/
  memos/
    compose.yaml
    .env
    data/
  jellyfin/
    compose.yaml
    .env
    config/
    cache/
<备份存储>/application-backups/
  memos/

数据库、附件和设置通常必须备份;缓存可根据官方说明重建。备份应有独立副本,不能只放在同一应用目录里。把原始影片、音乐与照片放到自己的媒体目录,通过只读挂载提供给播放服务;避免两个应用各复制一份媒体。

示例仓库中的 examples/compose/<应用>/ 提供配置参考。复制文件到 NAS 的目标目录,先填 .env,再启动。示例中的 IMAGE_TAG 故意留空,必须从官方发布页填写确实存在的版本;不要把字面上的占位提示当标签。

路径和权限要一项一项核对

绑定挂载的相对路径相对于 Compose 项目文件解析。./data:/data 很方便,但移动 Compose 文件会改变数据位置。长期运行前固定项目目录;使用图形管理工具时还要确认它实际保存 Compose 的地方。

在 NAS 上执行 id 查看当前账号数字 UID/GID,使用 ls -ldn 查看目标目录数字所有者。应用是否支持 userPUID/PGID 或自己的 UID/GID 由镜像决定;环境变量名字不能跨项目照搬。给账户目录访问权限还需要父目录的遍历权限。

预先创建需要的目录,并按官方镜像要求授予运行身份权限。某些镜像需要以 root 启动以准备目录,再降权运行;强行设置 user 可能破坏初始化。相反,支持非 root 的应用不需要为了方便改成最高权限。

管理 .env 和敏感内容

.env 用于 Compose 变量替换,不是加密保险箱。它可以包含数据库密码和加密密钥,只允许实际维护账号读取,不放入公共共享或 Git 仓库。在 NAS 的目标项目目录可执行:

sh
chmod 600 .env
docker compose config --quiet

chmod 600 将此文件设为只有所有者读写,不会为备份自动提供加密。备份 .env 时同样要限制访问。调试时避免直接打印整份 docker compose config,因为它会展开秘密。

迁移与恢复验收

先记录当前镜像标签与挂载,停止写入服务,复制配置和一致的数据副本到备份位置。恢复时使用一个新目录和未占用的测试端口,恢复原 UID/GID 与镜像版本。检查数据库记录、附件与登录状态,再切换正式入口。若只有配置而没有数据,容器启动成功也只是一个空应用。

延伸阅读

官方参考

fnOS 非官方中文使用指南,与飞牛官方无隶属关系。