Docker 镜像的 UID、GID 管理都这么阴间的么?

1 天前
 future0906
最近在整理 Homelab 里面 NAS 的权限,以前都没太关注。里面的 UID 和 GID 的管理简直五花八门。

1. 有的在 Dockerfile 里面指定 UID 为 ARG 。
2. 有的写死。
3. 有的环境变量可以改。
4. 有的直接 root 一把梭。

对于 3 ,一般来说是在环境变量给 PUID 、UID 之类,这类还比较方便。
对于 4 的话其实也还好,只要不指定 USER ,在 Compose 里面用 user: <uid:gid>这样指定
对于 1 ,2 是真的太难了。要么就改 Dockerfile ,反正都要自己 build 。好一点的勉强能在 Compose 里面写个 InlineDockerfile ,手动改一下,复杂一点的镜像鬼知道有多少文件的 owner 是原来的账号?

虽然我知道其实不改好像没有啥关系,**但是看到 ls 和 ps 时候的混乱的用户名,强迫症真的难绷。**

我看文档似乎提供 subuid 、UserIdMap 之类的手段,但是网上讨论的人几乎没有,是大家的不在意吗?
965 次点击
所在节点    Docker
13 条回复
julyclyde
1 天前
你如果没用 nfs 这类东西的话,
其实 uid 是无所谓的
Niphor
1 天前
蹲一个终极方案

反正除了 smb 的我都改 1000:1000 了其他都是按照他默认的来
future0906
1 天前
@julyclyde 确实是,但是 ls 和 ps 的时候没有显示正确很难受
future0906
1 天前
@Niphor 感觉按照默认的来似乎就是终极方案
julyclyde
1 天前
@future0906 按说容器里就没那么多用户名的
别把临时的容器当成长期的虚拟机来用
dbak
1 天前
你可以查查 docker run -u 的用法
future0906
1 天前
@julyclyde 不是在容器里面建用户。就譬如容器里面的容器的用户 joplin ,是 1000

在宿主机里面的 ps 看到的进程用户就是 1000 ,或者宿主机 1000 的用户名,纯数字还好,其他用户就怪怪的。譬如刚好宿主机的用户名字就 nginx 。

ls 也是同理
future0906
1 天前
@dbak

查过了,这个跟 compose 里面指定 user 是一样的。这个方法只对某些镜像有用。某些镜像会创建一个自己的 user ,并且初始化文件权限给这个用户,指定运行用户就会出错。

当然我可以改文件权限,事实我也做过。但是每个镜像都不一样,要看源代码改,非常麻烦。
Quint
1 天前
优先使用 linuxserver 的镜像 都遵循统一的标准
SenLief
1 天前
被这个权限的烦死了都,很多构建都喜欢用 root 来构建,而 nas 大多数又不提供,哎。
future0906
1 天前
@Quint 确实是一个思路,可惜我用的镜像 linuxserver 都没有提供
@SenLief 哎,是啊。很多 docker 镜像构建都不统一。看来大家都是 just work 就行了
julyclyde
1 天前
@future0906 这 *就是* 在容器里创建用户
你以为的创建是什么?其实就是/etc/passwd 文件里加一行啊
cheng6563
22 小时前
嫌难看就搞 subuid 映射,这样把所有 uid 都搞成 10000 开始,每个都不好看,就不用当心账号问题了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1161554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX