马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Ornt5i 于 2026-7-14 12:03 编辑
标签: Hermes UGOS 绿联NAS Docker 权限 PUID PGID
备注: “本内容部分/全部由AI生成,总结了我的修复过程思路”
最近在绿联 DX4600 Pro 上部署 Hermes Agent,遇到了一个比较典型的权限问题,排查了一圈之后发现 Hermes 官方其实已经支持 UGOS,只是很多人容易忽略这个配置。
把整个过程分享出来,希望能帮到后面遇到同样问题的朋友。
问题现象
Hermes 部署完成后,可以正常启动,但访问 NAS 共享目录时报错,例如:
Permission denied: '/volume1/龙虾文件夹1/...'甚至在容器里查看权限:
ls -ld /volume1/龙虾文件夹1显示:
d---------但是在 NAS 宿主机查看:
ls -ld /volume1/龙虾文件夹1却是:
drwxrwxrwx+权限完全正常。
最开始我一直以为是:
- Docker 挂载失败
- UGOS ACL 问题
- bind mount 权限异常
结果都不是。
排查过程 整个排查过程大概经历了几个阶段。
① 排除 Docker 挂载问题
先确认:
docker inspect hermes确认:
另外,我还有一个 Spider 容器,同样挂载:
/volume1/龙虾文件夹1Spider 可以正常读写。
说明:
不是 Docker 挂载的问题。
② 排除共享目录权限
宿主机执行:
stat /volume1/龙虾文件夹1得到:
Access: (0777/drwxrwxrwx)再执行:
getfacl /volume1/龙虾文件夹1结果:
user::rwxgroup::rwxother::rwx说明:
共享目录权限本身没有问题。
③ 找到真正原因
继续分析 Hermes 官方镜像启动流程:
Docker │ ▼s6-overlay │ ▼main-wrapper.sh │ ▼s6-setuidgid hermes │ ▼gatewayHermes 并不会一直以 root 运行。
启动后会主动降权:
root │ ▼uid=10000gid=10000而绿联 UGOS 的共享目录,对这个 UID 并没有对应权限,因此出现:
Permission denied
一开始我也走了弯路
最开始我尝试:
user: "0:0"甚至修改:
/opt/hermes/docker/main-wrapper.sh跳过:
s6-setuidgid hermes虽然能够解决权限问题,但是:
并不是推荐方案。
后来发现:官方其实已经支持 UGOS
翻了一下 Hermes 镜像里的源码,发现 stage2-hook.sh 已经写好了:
# NAS users (UGOS, Synology, unRAID)而且直接支持:
PUIDPGID启动时会自动执行:
usermod hermesgroupmod hermes把默认:
uid=10000修改成:
你的 NAS 用户 UID然后仍然保持:
drop privileges也就是说:
既保留了官方的安全设计,
又能正常访问共享目录。
正确配置方式
compose 中增加:
environment: TZ: Asia/Shanghai PUID: "1000" PGID: "10" 注意:
不要再配置:
user: "0:0"官方已经明确说明:
不建议使用 --user(Compose 的 user: 本质也是同一个机制)。
如何查看自己的 UID/GID
SSH 登录 NAS:
id例如:
uid=1000(14752872993)gid=10(admin)groups=10(admin),100(users),...那么配置:
PUID: "1000"PGID: "10"即可。
也可以使用:
HERMES_UIDHERMES_GID效果相同。
如何验证是否生效
不要执行:
docker exec hermes id这个默认是 root。
应该查看 Hermes 实际运行进程:
docker exec hermes ps -eo user,uid,gid,pid,cmd | grep gateway正常应该看到:
hermes 1000 10 ... hermes gateway run也可以直接:
docker exec -u hermes hermes id输出类似:
uid=1000(hermes)gid=10(...)说明已经成功。
最终效果
配置完成后:
✅ Hermes 可以正常访问绿联 NAS 的共享目录
✅ 不需要修改官方镜像
✅ 不需要强制 root 运行
✅ 升级 Hermes 不会丢失配置
对于长期部署来说,这是官方推荐、维护成本也最低的方案。
最后补充一个容易误导人的现象
即使权限已经正常,有时执行:
ls -ld /volume1/共享目录仍可能显示:
d---------但实际上:
docker exec -u hermes hermes ls /volume1/共享目录已经能够正常列出文件,也可以正常读写。
因此,不要只根据 ls -ld 的输出判断是否有权限,更准确的做法是实际测试目录访问和文件读写。
我觉得这篇还有一个亮点,就是它不仅给出了最终配置,还完整记录了排查思路。对于后来遇到类似问题的人,能够知道为什么不要去修改 main-wrapper.sh,而应该优先使用 Hermes 官方已经提供的 PUID/PGID 支持。
|