如何获取PUID和PGID

前言

最近用了一些 LinuxServer.io 社区维护的 Docker 镜像,这个社区是由一群来自世界各地的志同道合的爱好者组成的,主要目标是通过简洁明了的文档提供易于使用且精简的 Docker 镜像。他们已经在网络上构建和维护了大量的 Docker 镜像,下图只是其中的一小部分

title

这些 Docker 镜像的质量相当高,并且有一个特点就是在环境变量中使用了 PUIDPGID 变量,按照官方的说法,虽然 Docker 目前已经支持了 --user 参数。但我们的镜像目前还不兼容,所以我们还是建议继续使用 PUID 和 PGID。

为什么要用

  1. 因为 Docker 需要系统中管理网络、文件系统、进程的权限,所以通常是以 root 的身份在运行。这意味着,容器内的用户默认也是以 root 用户运行。这种高权限的访问,并不是日常使用中所推荐的,除非你对 linux 运维有着深入的理解。

  2. 另一个问题就是对容器映射出来的文件的管理。如果进程是以 root 身份运行,那么它所创建的文件的所有者都是 root 用户,这有可能会导致你没有权限去修改这些文件(如果你是以非 root 身份登陆服务器。)

基于上述原因,在 NAS 的日常使用中,有时候会遇到无法删除文件,无法进入某个文件夹,这些都是权限不足导致的。权限不出错的最好办法当然是确保用户一致。确保主机上的任何卷目录均由您指定的同一用户拥有,这可以通过指定用户 PUID 和组 PGID 来规避此问题。

所以在 LinuxServer.io 的镜像说明中,一般都用了

1
-e PUID=1000 -e PGID=1000

或者

1
2
3
environment:
- PUID=1000
- PGID=1000

当然你也可以使用自己的 id

查找 PUID 和 PGID

先找到群晖里有哪些用户

title

通过 SSH

通过 putty 或者 xshell 客户端,用 SSH 协议连接到群晖,通过下面的命令来查询你当前用户的 id。其中 uidgid 分别对应 PUIDPGID

1
id $user

以用户 docker 为例

1
id docker

title

所以用户 dockerPUID=1030PGID=100

通过任务计划

如果你觉得用 SSH 还是有点复杂,那么还有一种更简单的办法,可以不需要借助第三方的客户端

控制面板 中进入 任务计划,新建 用户定义的脚本

title

  • 常规 中设定任务名称,用户账号用默认的 root

title

  • 选择 在以下日期运行

title

  • 任务设置 中设置了邮件地址,这样可以获得运行的状态,命令中填入了脚本的地址,还是以用户 docker 为例

注意:id 是小写字母

title

选中脚本右键 运行 来做测试

title

如果一切正常,很快就会收到一封这样的邮件

title

可以看到这种方式获得的结果和之前通过 SSH 获得的结果是完全一致的。

参考文档

什么是PUID和PGID · LinuxServer | 中文
地址:https://linuxserver.watercalmx.com/general/understanding-puid-and-pgid.html

Understanding PUID and PGID - LinuxServer.io
地址:https://docs.linuxserver.io/general/understanding-puid-and-pgid

fleet
地址:https://fleet.linuxserver.io/

畅快玩转NAS 篇一:Linux权限简单讲解_服务软件_什么值得买
地址:https://post.smzdm.com/p/a99v2500/