外观
规划 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 查看目标目录数字所有者。应用是否支持 user、PUID/PGID 或自己的 UID/GID 由镜像决定;环境变量名字不能跨项目照搬。给账户目录访问权限还需要父目录的遍历权限。
预先创建需要的目录,并按官方镜像要求授予运行身份权限。某些镜像需要以 root 启动以准备目录,再降权运行;强行设置 user 可能破坏初始化。相反,支持非 root 的应用不需要为了方便改成最高权限。
管理 .env 和敏感内容
.env 用于 Compose 变量替换,不是加密保险箱。它可以包含数据库密码和加密密钥,只允许实际维护账号读取,不放入公共共享或 Git 仓库。在 NAS 的目标项目目录可执行:
sh
chmod 600 .env
docker compose config --quietchmod 600 将此文件设为只有所有者读写,不会为备份自动提供加密。备份 .env 时同样要限制访问。调试时避免直接打印整份 docker compose config,因为它会展开秘密。
迁移与恢复验收
先记录当前镜像标签与挂载,停止写入服务,复制配置和一致的数据副本到备份位置。恢复时使用一个新目录和未占用的测试端口,恢复原 UID/GID 与镜像版本。检查数据库记录、附件与登录状态,再切换正式入口。若只有配置而没有数据,容器启动成功也只是一个空应用。