3

使用命令行运行 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" ]

但是,这是行不通的。

4

1 回答 1

2

一个相对简单的解决方案是将 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

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

于 2018-07-24T12:50:14.887 回答