2016-02-26 100 views
2

我目前正在试验Docker,特别是在给定容器内的用户影响Docker主机本身的方面。最终,我希望用户能够在其容器内的自己的主机上运行容器。这听起来有点荒谬,但我希望它有效。如何将容器用户添加到Docker主机中的用户组?

目前,我正在寻找一种方法让给定的用户成为Docker主机的docker组的一部分。有没有办法做到这一点?

回答

1

从Docker主机的角度来看,容器内部的任何用户都被视为与具有相同UID(不是同一名称!)的容器外的用户完全相同,无论UID是否实际上正在使用主人。不幸的是,似乎只有拥有用户名的用户可以属于组,因此您不能只将UID添加到组中。相反,您需要将具有相同UID的主机用户添加到组中(或者如果不存在,则使用该UID创建用户)。

+0

那么是否可以更改容器内用户的UID,以便我可以将其映射到Docker主机上的用户? –

+0

根据你的设置,你可以用'--user'选项设置UID到'docker run' - 或者你的容器不是那么简单? – jwodder

+0

我认为我使用的基本映像以某种方式从根目录切换到另一个非root用户。 '--user'如何影响它? –

0

我写了一个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!

+0

另外,如果你想共享来自主机的docker守护进程:'docker run -v /var/run/docker.sock:/var/run/docker.sock ...' – mattexx

+0

这并不回答有关添加容器内部用户到主机组。 – jwodder

相关问题