我想以任意用户身份运行docker容器,并在运行时将其传递给映像。例如docker run -u 1000 myimage
。
以上是可能的。但是我想在启动容器时(可能通过CMD)与此用户1000创建一个主目录,并在该目录中执行容器服务。
这是可行的,并且一些指针对于实现它的方法很有用。
答案 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。