2017-06-21 45 views
1

SO post about replicating UID/GID in container from host類似,但是如何與具有複製UID和GID的用戶構建圖像?最好是,你如何用dockerfile做到這一點?Dockerfile將主機用戶UID和GID複製到圖像

我可以用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將產生一個泊塢窗文件以下,並建立它。

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。

回答

3

您可以將它作爲構建參數傳遞。你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 

然後你會通過您的構建命令的選項:

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

它的作品!非常感謝! – minghua

相關問題