Stackoverflow 告诉我将其发布在这里...
我创建了一个基于 CentOS 7 的 docker 容器(使用 Dockerfile),其中包含执行任务(git clone ssh://... 和 make)所需的一切。结果被写入共享卷(共享卷是签出的源代码,因此默认情况下它们在那里),以便主机可以使用它们。我只能通过确保容器用户的 uid 和 gid 与主机用户的 uid 和 gid 匹配(例如,两者都是 myuser 1000:1000)来实现这一点。如果 uid 和 gid 不匹配,我在写入共享卷时会收到权限错误。容器有一个 .ssh 文件夹,其中包含用户的私钥。
我的任务是消除让两个用户匹配的必要性。我在 docker run 命令行中添加了 --user $(id -u):$(id -g),我可以正常写入共享卷,但这会破坏访问我们的 git 存储库的能力,假设不再有任何 ssh 密钥关联(获取 >> 请确保您具有正确的访问权限...)。
我怎样才能拥有一个不依赖于匹配用户的容器,我可以完全写入共享卷并让它通过 ssh 检索我的源代码?
更新:
刚刚将 -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro 添加到 docker run 命令,但容器现在以错误的用户身份运行。
主机:
user_a 1000:1000
user_b 1001:1001
/主页/用户_a (1000:1000)
/主页/用户_b (1001:1001)
容器:
user_b 1000:1000
/home/user_b (1000:1000)
当我正常运行容器时,它正在运行 user_b (1000:1000) 无法访问主机,因为 UID 和 GID 不匹配
当使用 --user 1001:1001 时,我可以正常写入共享卷,但无法访问 /home/user_b,因为 UID 和 GID 不匹配
当使用 -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro 时,运行用户是 user_a (因为 contianer 是 1000:1000,它映射到 user_a)
当同时使用 -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro --user 1001:1001 时,我收到 whoami 错误:找不到用户 ID 1001 的名称,并且拒绝访问 /home/user_b