【问题标题】:How do I add a container user to a user group in the Docker host?如何将容器用户添加到 Docker 主机中的用户组?
【发布时间】:2016-02-26 19:04:15
【问题描述】:

我目前正在 Docker 上专门针对给定容器内的用户影响 Docker 主机本身的方面进行试验。最终,我希望用户能够从其容器内部在其自己的主机上运行容器。这听起来有点荒谬,但我希望它能奏效。

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

【问题讨论】:

    标签: linux docker


    【解决方案1】:

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

    【讨论】:

    • 那么是否可以更改容器内用户的 UID,以便将其映射到 Docker 主机上的用户?
    • 根据您的设置,您可以将带有--user 选项的UID 设置为docker run — 或者您的容器不是那么简单?
    • 我认为我正在使用的基本映像以某种方式从 root 切换到另一个非 root 用户。 --user 对此有何影响?
    • --user 使容器的主要命令以给定用户身份运行,就像在图像的 Dockerfile 末尾添加了 USER 指令一样。
    • “主命令”是指在CMD 中定义的那个吗?我认为基础镜像做了一些根级别的事情,然后在做它最终应该做的事情之前切换到另一个用户......
    【解决方案2】:

    我编写了一个 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 守护进程:docker run -v /var/run/docker.sock:/var/run/docker.sock ...
    • 这没有回答有关将容器内部用户添加到主机组的问题。
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多