有条件地在Dockerfile中使用root用户

时间:2018-06-19 23:17:46

标签: docker dockerfile docker-build

说我想有条件地以root用户身份运行,否则要以一个名为“节点”的用户身份运行。就像这样:

if(useRootUser){

  ENV HOME="/root"
  RUN mkdir -p /root/.docker_r2g_cache
  RUN mkdir -p /root/app/node_modules
  WORKDIR /root/app

}
else {

  USER node
  ENV USER="node"
  ENV HOME="/home/node"
  RUN mkdir -p /home/node/.docker_r2g_cache
  RUN mkdir -p /home/node/app/node_modules
  WORKDIR /home/node/app

}

显然,伪代码不正确。可能最有效的方法是什么?

我想到的唯一方法就是使用--build-arg

类似这样的东西:

 ARG user, home;

 USER $user
 ENV USER="$user"
 ENV HOME="$home"
 RUN mkdir -p $home/.docker_r2g_cache
 RUN mkdir -p $home/app/node_modules
 WORKDIR $home/app

然后使用:

docker build <tag> --build-arg home="/root" --build-arg user="root"

docker build <tag> --build-arg home="/home/node" --build-arg user="node"

那是对的吗?

1 个答案:

答案 0 :(得分:1)

如果我是你,我将创建一个设置脚本,将用户作为参数,然后针对每个用户案例分别分配dockerfiles。

由于它的可能性很高,因此您将遇到一些额外的问题,这些问题将要求用户使用其他行(例如权限)。 将dockerfile分开将使其更加整洁和可维护。

我刚刚编写了简单的安装脚本。您当然可以改善它。

set -aeuo pipefail
#setup.sh 
case $1 in
    "root")
        echo "docker build /path/to/root/DockerFile" 
        ;;
    "node" )
        echo "docker build /path/to/node/DockerFile" 
        ;;
    *)
        echo "wrong user"
    ;;
esac

然后您可以运行

./ setup.sh根 ./ setup.sh节点