说我想有条件地以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"
那是对的吗?
答案 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节点