我是 Docker 新手,我发现一些用于运行容器化软件的脚本需要指定其中之一来匹配特定用户和组。所以我想知道两者之间有什么区别?下面举例说明。
Jellyfin 使用 UID/GID 对:
docker run -d \
--name="Jellyfin" \
--restart=always \
--network=host \
-p 8096:8096 \
-e UID=1000 \
-e GID=1000 \
-v /media:/media \
-v $HOME/docker/jellyfin/config:/config \
jellyfin/jellyfin:latest
而 Calibre-web 使用 PUID/PGID 集:
docker create --name=calibre-web --restart=always \
-v ~/books:/books \
-v /etc/localtime:/etc/localtime:ro \
-e PGID=1000 -e PUID=1000 \
-p 8081:8083 \
technosoft2000/calibre-web
在寻找信息时我甚至看到了一些随机的 Github 仓库在某个时间点从前者变成了后者;这两个选项有什么区别?
答案1
我理解您的问题是:“为什么这些变量被称为 PUID 和 PGID,而不是 UID 和 GID”?事实上,它们可以命名为任何名称。Docker 和 Linux 都不在乎。应用程序决定如何处理它们。
进一步的搜索发现,这仅仅是习俗,有些应用程序会自行处理。例如,一个应用程序分别使用环境变量 MAYAN_USER_UID 和 MAYAN_USER_GID。
答案2
该参数-e
设置环境变量。environment variable PUID
通过谷歌搜索可得到以下结果:
了解 linuxserver.io 上的 PUID 和 PGID,他们为 calibre-web 提供了 docker 镜像。
引用该页面的内容:
使用 PUID 和 PGID 允许我们的容器将容器的内部用户映射到主机上的用户。我们所有的容器都使用这种用户映射方法,并应相应地应用。
该页面还有另一条注释:
我们知道 Docker 引擎的最新版本引入了 --user 标志。我们的镜像尚不兼容该标志,因此我们建议继续使用 PUID 和 PGID。
因此,需要运行容器。具体如何实现则由这些镜像的维护者决定。