如何获取PUID和PGID
前言
最近用了一些 LinuxServer.io
社区维护的 Docker 镜像,这个社区是由一群来自世界各地的志同道合的爱好者组成的,主要目标是通过简洁明了的文档提供易于使用且精简的 Docker 镜像。他们已经在网络上构建和维护了大量的 Docker 镜像,下图只是其中的一小部分
这些 Docker 镜像的质量相当高,并且有一个特点就是在环境变量中使用了 PUID
和 PGID
变量,按照官方的说法,虽然 Docker 目前已经支持了 --user 参数。但我们的镜像目前还不兼容,所以我们还是建议继续使用 PUID 和 PGID。
为什么要用
因为 Docker 需要系统中管理网络、文件系统、进程的权限,所以通常是以 root 的身份在运行。这意味着,容器内的用户默认也是以 root 用户运行。这种高权限的访问,并不是日常使用中所推荐的,除非你对 linux 运维有着深入的理解。
另一个问题就是对容器映射出来的文件的管理。如果进程是以 root 身份运行,那么它所创建的文件的所有者都是 root 用户,这有可能会导致你没有权限去修改这些文件(如果你是以非 root 身份登陆服务器。)
基于上述原因,在 NAS 的日常使用中,有时候会遇到无法删除文件,无法进入某个文件夹,这些都是权限不足导致的。权限不出错的最好办法当然是确保用户一致。确保主机上的任何卷目录均由您指定的同一用户拥有,这可以通过指定用户 PUID
和组 PGID
来规避此问题。
所以在 LinuxServer.io
的镜像说明中,一般都用了
1 | -e PUID=1000 -e PGID=1000 |
或者
1 | environment: |
当然你也可以使用自己的 id
查找 PUID 和 PGID
先找到群晖里有哪些用户
通过 SSH
通过 putty
或者 xshell
客户端,用 SSH 协议连接到群晖,通过下面的命令来查询你当前用户的 id。其中 uid
和 gid
分别对应 PUID
和 PGID
1 | id $user |
以用户 docker
为例
1 | id docker |
所以用户 docker
的 PUID=1030
,PGID=100
通过任务计划
如果你觉得用 SSH 还是有点复杂,那么还有一种更简单的办法,可以不需要借助第三方的客户端
在 控制面板
中进入 任务计划
,新建 用户定义的脚本
常规
中设定任务名称,用户账号用默认的root
- 选择
在以下日期运行
任务设置
中设置了邮件地址,这样可以获得运行的状态,命令中填入了脚本的地址,还是以用户docker
为例
注意:id 是小写字母
选中脚本右键 运行
来做测试
如果一切正常,很快就会收到一封这样的邮件
可以看到这种方式获得的结果和之前通过 SSH 获得的结果是完全一致的。
参考文档
什么是PUID和PGID · LinuxServer | 中文
地址:https://linuxserver.watercalmx.com/general/understanding-puid-and-pgid.htmlUnderstanding PUID and PGID - LinuxServer.io
地址:https://docs.linuxserver.io/general/understanding-puid-and-pgidfleet
地址:https://fleet.linuxserver.io/畅快玩转NAS 篇一:Linux权限简单讲解_服务软件_什么值得买
地址:https://post.smzdm.com/p/a99v2500/