V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
future0906
V2EX  ›  Docker

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

  •  
  •   future0906 · 1 天前 · 945 次点击
    最近在整理 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 之类的手段,但是网上讨论的人几乎没有,是大家的不在意吗?
    13 条回复    2025-09-25 14:37:44 +08:00
    julyclyde
        1
    julyclyde  
       1 天前
    你如果没用 nfs 这类东西的话,
    其实 uid 是无所谓的
    Niphor
        2
    Niphor  
       1 天前
    蹲一个终极方案

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

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

    ls 也是同理
    future0906
        8
    future0906  
    OP
       1 天前
    @dbak

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

    当然我可以改文件权限,事实我也做过。但是每个镜像都不一样,要看源代码改,非常麻烦。
    Quint
        9
    Quint  
       1 天前
    优先使用 linuxserver 的镜像 都遵循统一的标准
    SenLief
        10
    SenLief  
       1 天前
    被这个权限的烦死了都,很多构建都喜欢用 root 来构建,而 nas 大多数又不提供,哎。
    future0906
        11
    future0906  
    OP
       1 天前
    @Quint 确实是一个思路,可惜我用的镜像 linuxserver 都没有提供
    @SenLief 哎,是啊。很多 docker 镜像构建都不统一。看来大家都是 just work 就行了
    julyclyde
        12
    julyclyde  
       14 小时 51 分钟前
    @future0906 这 *就是* 在容器里创建用户
    你以为的创建是什么?其实就是/etc/passwd 文件里加一行啊
    cheng6563
        13
    cheng6563  
       12 小时 23 分钟前
    嫌难看就搞 subuid 映射,这样把所有 uid 都搞成 10000 开始,每个都不好看,就不用当心账号问题了。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:00 · PVG 03:00 · LAX 12:00 · JFK 15:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.