用户挂载到容器时缺少 Linux 用户组
Posted
技术标签:
【中文标题】用户挂载到容器时缺少 Linux 用户组【英文标题】:Linux user groups missing when user mounted to container 【发布时间】:2021-03-16 16:31:32 【问题描述】:问题:附加到 Linux 用户的组在容器内不可见。
工作流程:
-
创建了一个 docker 镜像,其中创建了一个名为
sample:sample(8000:8000)
的 user
和 group
。
使用相同的 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 用户组的主要内容,如果未能解决你的问题,请参考以下文章