使用命令行运行docker映像,例如:
> docker run -it -v $OutsideDir:$InsideDir -u $(id -u):$(id -g) c0ffeebaba bash
我可以从Docker容器内部以主机上的当前用户身份处理数据。但是,在容器“ whoami”中询问会给出以下响应:UID未知。
因此对没有主目录的用户执行外壳程序。怎么样 我可以为该用户完成一些初始化吗?有没有办法从内部将外部用户的用户ID和组ID映射到特定的用户名?可以动态地执行此操作,以便它可以通过上面显示的'--user'标志指定的任何用户使用吗?
我的第一种方法是在Dockerfile中使用“ CMD”,例如
CMD ["source", "/home/the_user/.bashrc" ]
但是,这不起作用。
答案 0 :(得分:1)
一个相对简单的解决方案是将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
或者,对于外壳(默认情况下,高山没有bash):
./runit.sh -it --rm centos bash --login
您可以放入-w $HOME
,使其开始在用户的主目录中,等等。