以 root 和非 root 身份运行 docker

bat*_*lei 4 docker dockerfile

对“以非 root 用户与 root 用户身份运行 docker”感到困惑。

第一个问题(以非 root 用户身份运行):根据Linux 的安装后步骤,要以非 root 身份运行 docker,我们创建 docker 组并将用户添加到其中。然而,文章声称“docker 组授予与 root 用户等效的权限”。所以如果我理解正确的话,我们不是以root身份运行docker,而是以与root一样强大的用户(在docker组中)运行它?

第二个问题(以 root 用户身份运行):假设我按照上述步骤操作(创建 docker 组并将用户添加到其中)。但是我在 Dockerfile 中指定了“USER root”(下面的示例)。当我运行这个容器时,不管上面的设置如何,它都会以 root 身份运行,对吗?

FROM debian:stretch
USER root
CMD["echo", "hello"] 
Run Code Online (Sandbox Code Playgroud)

yam*_*enk 5

docker 组授予相当于 root 用户的权限

默认是。对于可以在机器上运行 docker 容器的任何用户来说也是如此。

原因是默认情况下,当您在容器内以 root 身份运行时,这将映射到主机上的 root。因此,您可以将主机上的一些敏感文件夹绑定到容器上,并在这些挂载上执行特权操作,因为容器内的用户是 root (pid 0)。

解决方案是启用用户命名空间,它基本上会将容器内的 root 用户映射到机器上的非 root 用户。

第二个问题(以 root 用户身份运行):假设我按照上述步骤操作(创建 docker 组并将用户添加到其中)。但是我在 Dockerfile 中指定了“USER root”(下面的示例)。当我运行这个容器时,不管上面的设置如何,它都会以 root 身份运行,对吗?

这里有几点:

  • 默认情况下,USER root是默认值,因此您不必指定它。(除非基础镜像明确设置了 root 以外的用户)
  • 从宿主机的角度来看,一个docker容器只是一个正常的进程。每个进程都有一个所有者。此所有者是执行docker run命令的主机用户。该USER root说明与此所有者无关。USER 指令仅指定容器内的用户,该用户将启动容器内与容器所有者不同的进程。