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

How to run docker image as a non-root user?

我是 docker 的新手。当我使用命令 运行 一个 docker 像 ubuntu 图像时,

sudo docker run -i -t ubuntu:14.04

默认是这样以root身份进入容器的。

我对此进行了搜索,但我无法了解如何以非 root 用户身份启动 docker 图像,因为我完全是该主题的初学者。

如果有人举例说明如何以非 root 用户身份 运行 docker 图像,那就太好了。

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

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

注意: Dockerfile 的 -u parameter is the equivalent of the USER 指令。

不建议在没有 sudo 的情况下允许 运行 docker,因为 Docker 没有内置审计或日志记录,而 sudo 有。 如果你想给非 root 用户 docker 访问权限,Red Hat 建议设置 sudo。 将如下条目添加到 /etc/sudoers.

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

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

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

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

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

诚然,这很老套,但对于那些您开始快速测试某些东西的快速小容器来说非常有用:

#!/bin/bash

set -eu

NAME=
IMG=

#UID=$(id -u)
USER=$(id -un)
GID=$(id -g)
GROUP=$(id -gn)

docker run -d -v /tmp:/tmp -v "/home/$USER:/home/$USER" -h "$NAME" --name "$NAME" "$IMG" /bin/bash

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

udocker 是 docker 的基本变体,它在用户 space:

中运行

udocker is a basic user tool to execute simple docker containers in user space without requiring root privileges. Enables download and execution of docker containers by non-privileged users in Linux systems where docker is not available. It can be used to pull and execute docker containers in Linux batch systems and interactive clusters that are managed by other entities such as grid infrastructures or externally managed batch or interactive systems.