为什么使用PUID和PGID
Docker默认使用root用户来run它的容器。因为它需要访问如网络配置、进程管理和文件系统这些资源。这意味着在容器内run的进程都是root
。这种类型的权限提升对日常使用并不理想,且可能给应用过大的权限。
另一个问题是容器通过volume的映射的文件管理。如果进程使用 root
权限run,那么容器生命周期内创建的所有文件和目录都将被root
持有,其他用户将会不可访问。
使用PUID
和PGID
可以让我们的容器将容器的内部用户映射为宿主机上的一个用户。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
命令来获取需要的uid
和gid
,比如在calibre-web中,我的PUID
和PGID
分别是宿主机对应的uid
和gid
$ id calibre
uid=1000(calibre) gid=1000(calibre) groups=1000(calibre),27(sudo),998(docker)
Be First to Comment