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