关于dockerfile:以root用户和非root用户身份运行docker

Run docker as root verus non-root

对于"以非root用户和root用户身份运行docker"感到困惑。

第一个问题(以非root用户身份运行):基于Linux的安装后步骤,要以非root用户身份运行docker,我们创建docker组并将用户添加到其中。但该文章声称" docker组授予的权限等同于root用户"。因此,如果我正确理解了这句话,我们不会以root身份运行docker,而是以拥有root权限的用户身份(在docker组中)运行它?

第二个问题(以root用户身份运行):假设我遵循上述步骤(创建docker组并将用户添加到其中)。但是我在Dockerfile中指定了" USER root"(下面的示例)。当我运行此容器时,无论上面的设置如何,它都将以root身份运行,对吗?

1
2
3
FROM debian:stretch
USER root
CMD["echo","hello"]

The docker group grants privileges equivalent to the root user

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

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

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

Second question (run as root user): assume I followed the steps above (create docker group and add user to it). Yet I specify"USER root" in a Dockerfile (example below).
When I run this container, it will run as root regardless of the setting above, correct?

这里有几点:

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


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

您的第一个问题是指本地linux用户访问docker套接字的权限(即执行docker rundocker ps等docker命令)。 Docker守护程序本身始终由root运行,并且通过将另一个用户添加到Docker组中,您授予使用该守护程序的权限。

但是第二个问题涉及容器内的用户。它与上述docker组无关,也与您用于运行docker命令的用户无关。

您可以选择任何用户在Dockerfile中使用USER 在容器内部运行,而不管您在容器外部用于构建或运行该映像的用户是什么。