如何以非root用户身份运行docker映像?

我是docker工人。 当我使用这个命令运行像ubuntu镜像这样的Docker镜像时,

sudo docker run -i -t ubuntu:14.04 

默认情况下,它以root身份进入容器。 在这里输入图像说明

我search了这个,但我不能得到任何如何作为一个非root用户启动一个docker的形象,因为我完全是这个主题的起始者。

如果有人解释如何以非root用户的身份运行Docker镜像,这将是非常好的。

docker run命令具有-u参数以允许您指定不同的用户。 在你的情况下, 假设你的docker镜像中有一个名为foo的用户 ,你可以运行:

 sudo docker run -i -t -u foo ubuntu:14.04 /bin/bash 

注: -u参数等同于Dockerfile的USER指令。

这种做法虽然很冒险,但是对于那些快速的小容器来说,你只是为了快速testing一下而已:

 #!/bin/bash set -eu NAME=$1 IMG=$2 #UID=$(id -u) USER=$(id -un) GID=$(id -g) GROUP=$(id -gn) # --privileged needed for dmidecode docker run --privileged -d -v /tmp:/tmp -v "/home/$USER:/home/$USER" -h "$NAME" --name "$NAME" "$IMG" init docker exec "$NAME" /bin/bash -c "groupadd -g $GID $GROUP && useradd -M -s /bin/bash -g $GID -u $UID $USER" 

我在这里使用的脚本的完整版本:

https://github.com/ericcurtin/staging/blob/master/d-run

不build议允许在不使用sudo的情况下运行docker,因为在sudo中,Docker没有内置审计或日志logging。 如果你想让Docker访问非root用户,Red Hatbuild议设置sudo。 在/ etc / sudoers中添加如下所示的条目。

 dwalsh ALL=(ALL) NOPASSWD: /usr/bin/docker 

现在,在〜/ .bashrc中设置一个运行docker命令的别名:

 alias docker="sudo /usr/bin/docker" 

现在,当用户以非root用户身份执行docker命令时,它将被允许并获得正确的日志logging。

 docker run -ti --privileged -v /:/host fedora chroot /host 

看日志或/ var / log / messages。

 journalctl -b | grep docker.*privileged Aug 04 09:02:56 dhcp-10-19-62-196.boston.devel.redhat.com sudo[23422]: dwalsh : TTY=pts/3 ; PWD=/home/dwalsh/docker/src/github.com/docker/docker ; USER=root ; COMMAND=/usr/bin/docker run -ti --privileged -v /:/host fedora chroot /host