Skip to content

理解PUID和PGID

为什么使用PUID和PGID

Docker默认使用root用户来run它的容器。因为它需要访问如网络配置、进程管理和文件系统这些资源。这意味着在容器内run的进程都是root。这种类型的权限提升对日常使用并不理想,且可能给应用过大的权限。

另一个问题是容器通过volume的映射的文件管理。如果进程使用 root 权限run,那么容器生命周期内创建的所有文件和目录都将被root 持有,其他用户将会不可访问。

使用PUIDPGID 可以让我们的容器将容器的内部用户映射为宿主机上的一个用户linuxserver.io 的所有容器都使用这种方法来映射用户。

PS:如果我们碰到容器的文件权限问题,不想用root用户,或者不能用root用户的时候(如我最近self hosted calibre-web碰到的问题),这个方法就派上用场了


使用这些变量

直接docker执行,添加-e PUID-e PGID

docker create --name=beets -e PUID=1000 -e PGID=1000 linuxserver/beets

docker-compose中使用

environment:
  - PUID=1000
  - PGID=1000

通常,你可能会通过id 命令来获取需要的uidgid,比如在calibre-web中,我的PUIDPGID分别是宿主机对应的uidgid

$ id calibre
uid=1000(calibre) gid=1000(calibre) groups=1000(calibre),27(sudo),998(docker)
Published in自建服务问题处理

Be First to Comment

Leave a Reply

Your email address will not be published.