Docker:将外部映射到内部用户(如何应用"--user",howte execute .bashrc)?



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

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

我可以作为主机上的当前用户在docker容器中处理我的数据。但是,在容器"whoami"中询问会得到UID未知的响应。

因此,shell是在没有主目录的用户上执行的。怎样我能为那个用户进行一些初始化吗?有没有办法将外部用户的用户id和组id从内部映射到特定的用户名?这可以动态地完成吗,这样它就可以为任何用户工作,通过如上所示的"--user"标志指定吗?

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

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

但是,这是行不通的。

一个相对简单的解决方案是将docker运行封装在脚本中,将/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,让它在用户的主目录中启动,等等。

相关内容

最新更新