gpt4 book ai didi

docker - 容器内的用户和组存在问题

转载 作者:行者123 更新时间:2023-12-02 19:14:26 34 4
gpt4 key购买 nike

初步
首先是初步的。当运行具有映射到主机某个部分的卷的Docker容器时,Docker容器内的用户通常是root用户,因此对于由该容器生成的文件,主机无法编辑,修改或删除它们。为了解决这个问题,有些人(包括创建我正在使用的图像的人)建议使用-u 情况
我有一个Docker镜像(由其他人在其他计算机上构建)
该Docker镜像假定用户将是ID为1000的用户
问题
当主机主机的唯一用户(用户ID为1000)运行该镜像时,就没有问题。但是,就我而言,我是该主机的第二个用户,因此我的用户ID为1001。因此,我具有以下内容:
在主机中,我执行cat /etc/passwd,并获得了多个用户,包括:

firstuser:x:1000:1000:firstluser,,,:/home/firstuser:/bin/bash

myself:x:1001:1001:My Name,,,:/home/myself:/bin/bash
然后 :
案例1 我使用以下命令运行容器
docker run -it --rm -u 1001:1001  -v /a/path:/another/path image  /bin/bash
因为执行 id -uid -g会给我1001。(我毕竟是第二个用户)
这样做会导致
groups:cannot find name for group ID 1001
然后我的用户变为 "I have no name!",当我执行 cat/etc/passwd时,我得到了 originaluser:x:1000:1000::/home/originaluser:bin/bash <----这里没有,,,
因此显然我的用户(1001)不存在,这会导致很多问题。
为了解决这个问题,我尝试了
CASE2 我使用以下命令运行容器
docker run -it --rm -u 1000:1000  -v /a/path:/another/path image  /bin/bash
这不会导致先前的错误,现在即使我是 myself,但将Docker镜像作为 firstuser运行,在容器中我是 originaluser(因为两者均为1000)
做我可以看到的 cat /etc/passwd
originaluser:x:1000:1000::/home/sensetime:bin/bash
如我所料,我的用户是 originaluser
我应该很高兴,但这也会引起问题!
稍后在容器内的程序上尝试创建文件(用户1000),但由于已映射文件且用户所有者为1001,因此创建失败。
什么是防止所有这些问题并能够使主机中的用户与容器中的用户同步的好方法?

最佳答案

我最近发现fixuid可能可以解决您的大多数问题。
容器中的uid / gid无法(或不应与主机上的uid / gid匹配)。
我上面链接的fixuid setuid go二进制文件可以通过在docker中更改用户的uid / gid以匹配您配置的uid / gid来解决此问题。
例如:
主机:uid / gid / name = 1001/1001 / kansai
guest 用户:uid / gid / name = 1000/1000 / user
如果您在容器中添加了fixuid二进制文件(构建阶段),则可以运行:

docker run --rm -it -u $(id -u):$(id -g) -v /a/path:/another/path image fixuid /bin/bash
您还可以在入口点设置 fixuid,以便于使用。

关于docker - 容器内的用户和组存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64311753/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com