gpt4 book ai didi

Docker:将外部映射到内部用户(如何应用 '--user' ,如何执行 .bashrc)?

转载 作者:行者123 更新时间:2023-12-02 18:21:40 25 4
gpt4 key购买 nike

使用命令行运行 docker 镜像,例如:

> docker run -it -v $OutsideDir:$InsideDir -u $(id -u):$(id -g) c0ffeebaba bash

我能够以主机上的当前用户身份从 docker 容器内部处理我的数据。但是,在容器“whoami”内部询问会给出 UID 未知的响应。

因此 shell 是在没有主目录的用户上执行的。如何我可以为该用户做一些初始化吗?有没有办法从内部将外部用户的用户标识和组标识映射到特定用户名?这是否可以动态完成,以便它适用于任何用户,如上所示通过“--user”标志指定?

我的第一种方法是在 Dockerfile 中使用“CMD”,例如

CMD ["source", "/home/the_user/.bashrc" ]

但是,那是行不通的。

最佳答案

一个相对简单的解决方案是将 docker run 包装在脚本中,将 /etc/passwd/etc/group 文件从主机映射到容器,以及用户的主目录,例如:

#!/bin/bash -p

# command starts with mapping passwd and group files
cmd=(docker run -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro)
# add home directory:
myhome=$(getent passwd $(id -nu) | awk -F: '{print $6}')
cmd+=(-v $myhome:$myhome)
# add userid and groupid mappings:
cmd+=(-u $(id -u):$(id -g))

# then pass through any other arguments:
cmd+=("$@")

"${cmd[@]}"

这可以运行为:

./runit.sh -it --rm alpine id

或者,对于 shell(默认情况下 alpine 没有 bash):

./runit.sh -it --rm centos bash --login

您可以输入 -w $HOME 让它在用户的主目录等中启动。

关于Docker:将外部映射到内部用户(如何应用 '--user' ,如何执行 .bashrc)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51494380/

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