【发布时间】:2016-02-26 19:04:15
【问题描述】:
我目前正在 Docker 上专门针对给定容器内的用户影响 Docker 主机本身的方面进行试验。最终,我希望用户能够从其容器内部在其自己的主机上运行容器。这听起来有点荒谬,但我希望它能奏效。
目前,我正在寻找一种方法让给定的用户成为 Docker 主机的docker 组的一部分。有没有办法做到这一点?
【问题讨论】:
我目前正在 Docker 上专门针对给定容器内的用户影响 Docker 主机本身的方面进行试验。最终,我希望用户能够从其容器内部在其自己的主机上运行容器。这听起来有点荒谬,但我希望它能奏效。
目前,我正在寻找一种方法让给定的用户成为 Docker 主机的docker 组的一部分。有没有办法做到这一点?
【问题讨论】:
从 Docker 主机的角度来看,容器内的任何用户都被视为与具有相同 UID(不是同名!)的容器外用户完全相同,无论 UID 是否实际在主持人。不幸的是,似乎只有具有用户名的用户才能属于组,因此您不能只将 UID 添加到组中。相反,您需要将具有相同 UID 的主机用户添加到组(如果不存在,则创建具有该 UID 的用户)。
【讨论】:
--user 选项的UID 设置为docker run — 或者您的容器不是那么简单?
--user 对此有何影响?
--user 使容器的主要命令以给定用户身份运行,就像在图像的 Dockerfile 末尾添加了 USER 指令一样。
CMD 中定义的那个吗?我认为基础镜像做了一些根级别的事情,然后在做它最终应该做的事情之前切换到另一个用户......
我编写了一个 bash 脚本来动态生成 dockerfiles,并将当前用户添加到容器和 docker 组中。这是它的肉:
# 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 "no-reply@nothere.com"
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!
【讨论】:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...