Dockerfile将主机用户UID和GID复制到图像

类似于SO主题关于从主机容器中复制UID / GID,但是如何与具有复制UID和GID的用户构build映像? 最好,你如何做一个docker文件?

我可以用一个bash脚本来做到这一点:

#!/bin/bash # current uid and gid curr_uid=`id -u` curr_gid=`id -g` # create bb.dockerfile: cat << EOF1 > bb.dockerfile FROM ubuntu:xenial-20170214 ARG UNAME=testuser EOF1 echo ARG UID=${curr_uid} >> bb.dockerfile echo ARG GID=${curr_gid} >> bb.dockerfile cat << EOF2 >> bb.dockerfile RUN groupadd -g \$GID \$UNAME RUN useradd -m -u \$UID -g \$GID -s /bin/bash \$UNAME USER \$UNAME CMD /bin/bash EOF2 docker build -f bb.dockerfile -t testimg . 

这个bash将会生成一个如下所示的docker文件并构build它。

  FROM ubuntu:xenial-20170214 ARG UNAME=testuser ARG UID=1982 ARG GID=1982 RUN groupadd -g $GID $UNAME RUN useradd -m -u $UID -g $GID -s /bin/bash $UNAME USER $UNAME CMD /bin/bash 

我要求的是从dockerfile中删除硬编码的主机UID 1982和GID 1982。

您可以将其作为构buildparameter passing。 你的Dockerfile可以是静态的:

 FROM ubuntu:xenial-20170214 ARG UNAME=testuser ARG UID=1000 ARG GID=1000 RUN groupadd -g $GID $UNAME RUN useradd -m -u $UID -g $GID -s /bin/bash $UNAME USER $UNAME CMD /bin/bash 

然后你会通过你的构build命令的选项:

 docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) \ -f bb.dockerfile -t testimg .