混淆“将rooter作为非root用户与root用户运行” .
第一个问题(以非root用户身份运行):基于Post-installation steps for Linux,以非root身份运行docker,我们创建docker组并将用户添加到其中 . 然而,该文章声称"The docker group grants privileges equivalent to the root user" . 因此,如果我正确地理解了这句话,我们不会以root用户身份运行docker,而是以root用户身份(在docker组中)运行它?
第二个问题(以root用户身份运行):假设我按照上面的步骤操作(创建docker group并向其添加用户) . 但我在Dockerfile中指定了“USER root”(下面的示例) . 当我运行这个容器时,无论上面的设置如何,它都将以root身份运行,对吗?
FROM debian:stretch
USER root
CMD["echo", "hello"]
2 回答
默认是的 . 任何可以在机器上运行docker容器的用户也是如此 .
原因是默认情况下,当您在容器内以root身份运行时,这将映射到主机上的root . 因此,您可以将一些敏感文件夹从主机绑定到容器上,并对这些安装执行特权操作,因为容器内的用户是root(pid 0) .
解决方案是启用user-namespace,它基本上将容器内的root用户映射到计算机上的非root用户 .
这里有几点:
默认情况下,
USER root
是默认值,因此您不必指定它 . (除非基本映像显式设置除root之外的用户)从主机的角度来看,docker容器只是一个正常的过程 . 每个流程都有一个所有者 . 该所有者是执行
docker run
命令的主机用户 .USER root
指令与此所有者无关 . USER指令仅指定容器内的用户,该用户将在容器内启动与容器所有者不同的进程 .好的,这里有两个不同的主题:
您的第一个问题是指本地Linux用户访问docker socket的权限(即执行docker命令,如
docker run
,docker ps
等) . Docker守护程序本身始终由root运行,通过将另一个用户添加到docker组,您可以授予使用该守护程序的权限 .但第二个问题是指容器内的用户 . 它与上面提到的docker组无关,也与用于运行docker命令的用户无关 .
您可以选择在Dockerfile中使用
USER <any user>
在容器内运行的任何用户,无论您在容器外部使用哪个用户来构建或运行该映像 .