2016-02-26 37 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

相關問題