在运行映像时以传递给它的任意用户身份运行docker容器

时间:2019-07-25 06:08:58

标签: docker

我想以任意用户身份运行docker容器,并在运行时将其传递给映像。例如docker run -u 1000 myimage

以上是可能的。但是我想在启动容器时(可能通过CMD)与此用户1000创建一个主目录,并在该目录中执行容器服务。

这是可行的,并且一些指针对于实现它的方法很有用。

1 个答案:

答案 0 :(得分:0)

首先将您当前的用户和组保存在变量中:

export uid=$(id -u)
export gid=$(id -g)

然后运行图像,您有两个选择:

1)从应用目录本身的位置运行图像:

sudo docker run -d \
 --user $uid:$gid \
 -v $(pwd):/home/$USER \
 --workdir="/home/$USER" \
 myimage

2)为应用创建一个新目录,例如在/ home / $ USER / app,但随后您必须在命令行中从docker文件中写入CMD。

例如,如果这是您的Dockerfile:

FROM node:7
WORKDIR /app
COPY package.json /app
COPY . /app
CMD node bin/www

您会这样运行:

sudo docker run -d \
 --user $uid:$gid \
 -v $(pwd):/home/$USER \
 --workdir="/home/$USER" \
 hello-express \
 bash -c "cp -rf /app/* /home/$USER/; node bin/www"

在这里,您使用$ uid:$ gid将用户传递到容器,然后将用户的主目录挂载为卷,然后将其设置为工作目录。

我知道这很复杂,但这是准确实现您想要的唯一方法。

如果您想要一个更简单的解决方案,请考虑以其他方式进行计划。有关以非root用户身份运行docker容器的信息,请参见this example