首页 文章

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

提问于
浏览
0

混淆“将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 回答

  • 1

    docker组授予与root用户等效的权限

    默认是的 . 任何可以在机器上运行docker容器的用户也是如此 .

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

    解决方案是启用user-namespace,它基本上将容器内的root用户映射到计算机上的非root用户 .

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

    这里有几点:

    • 默认情况下, USER root 是默认值,因此您不必指定它 . (除非基本映像显式设置除root之外的用户)

    • 从主机的角度来看,docker容器只是一个正常的过程 . 每个流程都有一个所有者 . 该所有者是执行 docker run 命令的主机用户 . USER root 指令与此所有者无关 . USER指令仅指定容器内的用户,该用户将在容器内启动与容器所有者不同的进程 .

  • 1

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

    您的第一个问题是指本地Linux用户访问docker socket的权限(即执行docker命令,如 docker rundocker ps 等) . Docker守护程序本身始终由root运行,通过将另一个用户添加到docker组,您可以授予使用该守护程序的权限 .

    但第二个问题是指容器内的用户 . 它与上面提到的docker组无关,也与用于运行docker命令的用户无关 .

    您可以选择在Dockerfile中使用 USER <any user> 在容器内运行的任何用户,无论您在容器外部使用哪个用户来构建或运行该映像 .

相关问题