前言

最近在飞牛(FnOS)上通过 Docker Compose 部署了 PicHome,原本以为挂载好路径、给了 chmod 777 权限就万事大吉。结果发现:
- 小库正常:添加小的 Eagle 库能识别。
- 大库卡死:一旦导入容量较大的 Eagle 素材库,点击同步/扫描时,进度条不动,或者貌似更新100%,实际没有真正入库,前台没有任何显示。
- 现象:虽然网页能看到文件夹,但程序似乎对文件没有完整的控制权(文件锁问题)。
经过一顿排查,终于发现问题根源:Docker 容器内部用户 ID 与飞牛系统用户 ID 不匹配。
核心原因
很多教程只教大家用 chmod -R 777 暴力开权限。虽然这能让容器“看见”文件,但对于需要频繁读写、生成缓存、处理文件锁的大型 Eagle 库,仅仅有读写权限是不够的,还需要正确的文件“所有者”。
- 误区:很多人以为 Web 容器默认用户 ID 是 33 (Debian/Ubuntu 标准)。
- 真相:PicHome 的 Docker 镜像基于 Alpine Linux,其内置的 www-data 用户 ID 其实是 82!
当然是不是82,我们后面验证一下即可。
如果你的素材库所有者是 root 或 admin (UID 1000),容器在处理大量文件时就会因为权限冲突被系统“**”出来。
✅ 终极解决方案
不需要复杂配置,只需要通过 SSH 执行一条命令,把素材库“过户”给容器用户即可。
步骤 1:确认容器用户 ID
如果你想验证一下,可以 SSH 连接飞牛,输入:
codeBash
sudo docker exec pichome-web id www-data
# 注意:pichome-web 是你的容器名
有人就要问,这个 pichome-web 的名字他妈在哪里?

你会发现输出的是 uid=82(www-data),实锤了就是 82。当然验证出来是33那后面的命令就填33。
步骤 2:执行“过户”命令(关键!)
在 SSH 中执行以下命令,将你的 Eagle 库文件夹所有者改为 82:
codeBash
# 请将下面的路径替换为你自己的真实素材库路径
sudo chown -R 82:82 /vol1/1000/你的素材库目录/library
解释:chown 是修改所有者,82:82 对应的是 Alpine 系统里 www-data 的用户 ID 和组 ID。(如果验证出来是33,那么就是33:33)
步骤 3:重启并同步
- 回到飞牛 Docker 管理器,重启 PicHome 容器。
- 进入 PicHome 网页后台 -> 库管理。
- 再次点击 “同步” 或 “扫描”。
这时候你会发现,几万张图片的大库也能顺滑跑完进度条了!
附:Docker Compose 推荐配置
为了防止新手在部署时遇到数据库连接问题,顺便贴一个通过验证的 docker-compose.yaml 配置:
codeYaml
version: '3'
services:
db:
image: mysql:5.7
container_name: pichome-db
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: pichome
MYSQL_USER: pichome
MYSQL_PASSWORD: pichome123
volumes:
- ./mysql:/var/lib/mysql
restart: always
pichome:
image: oaooa/pichome
container_name: pichome-web
depends_on:
- db
ports:
- "9000:80" # 端口根据自己需求改
volumes:
- ./html:/var/www/html
# 挂载你的 Eagle 库,注意左边改成你的真实路径
- /vol1/1000/你的素材库目录/library:/library
environment:
- DB_HOST=db
- DB_USER=pichome
- DB_PASSWORD=pichome123
- DB_NAME=pichome
restart: always
希望这个经验能帮到同样卡在“大库同步”上的飞牛玩家!