Dockerfile реплицирует UID и GID пользователя хоста в образ
Аналогично поэтому сообщение о репликации UID/GID в контейнере от хоста, но как вы строите образ с пользователем с replicate 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 создаст файл docker, как показано ниже, и построит на нем.
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
То, что я прошу, это удалить жестко закодированные uid хоста 1982 и GID 1982 из файла dockerfile.
2 ответа:
Вы можете передать его как build arg. Ваш 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 .
В конечном итоге
bb.bash
выглядит так:#!/bin/bash # current uid and gid curr_uid=`id -u` curr_gid=`id -g` # create bb.dockerfile: cat << EOF2 > bb.dockerfile FROM ubuntu:xenial-20180417 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 EOF2 docker build --build-arg UID=${curr_uid} --build-arg GID=${curr_gid} \ -f bb.dockerfile -t testimg .
Тогда другой скрипт должен создать контейнер:
#!/bin/bash docker run -it -d -v $(pwd)/shared:/home/testuser/shared \ --name testcontainer -P testimg