用户挂载到容器时缺少 Linux 用户组

Posted

技术标签:

【中文标题】用户挂载到容器时缺少 Linux 用户组【英文标题】:Linux user groups missing when user mounted to container 【发布时间】:2021-03-16 16:31:32 【问题描述】:

问题:附加到 Linux 用户的组在容器内不可见。

工作流程:

    创建了一个 docker 镜像,其中创建了一个名为 sample:sample(8000:8000)usergroup。 使用相同的 docker 映像创建了一个容器,并使用 readOnly 访问权限装载了 /etc/passwd 文件。
Command: docker run -itd --user "8000:8000" -v /etc/passwd:/etc/passwd:ro docker_image_name:latest bash

注意:用户和组 sample:sample(8000:8000) 也存在于主机上。

    使用示例用户附加的组是 sample 和 docker,在主机上使用 groups 命令检查。 在容器中执行并触发以下命令,
Command 1: whoami
Output: sample
Command 2: id -u
Output: 8000
Command 3: id -g
Output: 8000
Command 4: groups
Output: sample

观察:

    正如我们所见,在容器中,附加到示例用户的组只是示例,而 docker 缺失。

预期行为: 由于示例用户存在于主机和容器上,我希望与容器内的主机用户关联的组也一样,即我希望主机用户的详细信息覆盖容器中存在的那些。

【问题讨论】:

也许你可以尝试挂载/etc/group。 关于补充用户组成员的信息存储在/etc/group。正如 Philippe 建议的那样,您还需要映射它。 【参考方案1】:

问题在于 Docker 加载用户和组信息的方式。

问题已经报告给 Docker,因为它无法加载存储在 /etc/groups 文件中的附加组信息,因此,即使我们挂载 /etc/groups 文件,Docker 也不会遵守它。

因此,解决方案是使用 docker 提供的 --group-add 选项关联所需的组。

注意:提供的这个组必须是一个有效的组,然后它将与您的用户和现有的组相关联。

【讨论】:

以上是关于用户挂载到容器时缺少 Linux 用户组的主要内容,如果未能解决你的问题,请参考以下文章

使用用户名/密码使用 nfs 挂载网络共享

用于挂载EFS存储的ECS容器实例的引导用户数据

k8s文件挂载权限分析

linux下root用户不是拥有所有权限吗,为啥挂载光盘时不是这样?

linux中切换用户 “aa” 时不能切换 !

docker挂载volume的用户权限问题,理解docker容器的uid