以root用户身份运行docker non-root

时间:2018-06-12 06:47:09

标签: docker dockerfile

混淆“将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"] 

2 个答案:

答案 0 :(得分:2)

好的,这里有两个不同的主题:

您的第一个问题是指本地Linux用户访问docker套接字的权限(即执行docker命令,如docker rundocker 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容器只是一个正常的过程。每个流程都有一个所有者。该所有者是主机 执行docker run命令的用户。 USER root指令与此所有者无关。 USER指令仅指定容器内的用户 将在与容器所有者不同的容器内启动进程。