我目前正在试验Docker,特别是在给定容器内的用户影响Docker主机本身的方面。最终,我希望用户能够在其容器内的自己的主机上运行容器。这听起来有点荒谬,但我希望它有效。如何将容器用户添加到Docker主机中的用户组?
目前,我正在寻找一种方法让给定的用户成为Docker主机的docker
组的一部分。有没有办法做到这一点?
我目前正在试验Docker,特别是在给定容器内的用户影响Docker主机本身的方面。最终,我希望用户能够在其容器内的自己的主机上运行容器。这听起来有点荒谬,但我希望它有效。如何将容器用户添加到Docker主机中的用户组?
目前,我正在寻找一种方法让给定的用户成为Docker主机的docker
组的一部分。有没有办法做到这一点?
从Docker主机的角度来看,容器内部的任何用户都被视为与具有相同UID(不是同一名称!)的容器外的用户完全相同,无论UID是否实际上正在使用主人。不幸的是,似乎只有拥有用户名的用户可以属于组,因此您不能只将UID添加到组中。相反,您需要将具有相同UID的主机用户添加到组中(或者如果不存在,则使用该UID创建用户)。
我写了一个bash脚本,用于在容器和docker组上添加当前用户,随时生成dockerfiles。这里是它的肉:
# get the current user's info
user=$USER
uid=`id -u $user`
gid=`id -g $user`
# get gid for group docker
RESULT=$(id -g docker 2>&1)
if [ 1 -ne $? ] ; then
docker_gid=$RESULT
fi
echo FROM ubuntu:14.04
echo MAINTAINER Nobody "[email protected]"
echo USER root
echo "RUN apt-get update && apt-get -y install docker-engine"
echo "RUN /bin/bash -c 'getent passwd ${user} || \
adduser --system --gid ${gid} ${docker_group} --uid ${uid} --shell /bin/bash ${user} || \
usermod -l ${user} \$(getent passwd ${uid} | cut -d: -f1)'"
if [ -n "$docker_gid" ] ; then
echo "RUN /bin/bash -c 'getent group docker && groupmod --gid ${docker_gid} docker \
|| groupadd --gid ${docker_gid} docker'"
echo "RUN /bin/bash -c 'groups ${user} | grep docker || usermod --groups ${docker_gid} ${user}'"
fi
HTH!
那么是否可以更改容器内用户的UID,以便我可以将其映射到Docker主机上的用户? –
根据你的设置,你可以用'--user'选项设置UID到'docker run' - 或者你的容器不是那么简单? – jwodder
我认为我使用的基本映像以某种方式从根目录切换到另一个非root用户。 '--user'如何影响它? –