Docker:其他用户默认以我的用户身份运行他们的容器

Docker:其他用户默认以我的用户身份运行他们的容器

我已经从官方 apt 存储库安装了 Docker CE。为了授予普通用户访问 Docker 的权限,我创建了一个组docker并将每个用户添加到该组。但是,每当任何用户在容器内运行某些内容时(docker run -d ...),进程都会在我的 UID 下运行,并且他们创建的文件拥有我的所有权,例如myuser:myuser而不是anotheruser:anotheruser。当用户明确指定其 UID(docker run -d --user $UID ...)时,进程会使用其 UID 正确注册,但输出属于anotheruser:root。该组规范(即root)让我很麻烦。我该怎么办:

  1. 让其他用户仅在其 UID 下运行 docker;
  2. 使其输出寄存器为anotheruser:anotheruseranotheruser:docker

答案1

Docker 容器由 docker 守护程序运行,该守护程序以 root 身份运行。默认情况下,docker 守护程序以 root 身份运行容器。使用docker run --user={uid}:{gid},可以告诉守护程序以特定用户和有效组身份运行容器。

将系统用户添加到该docker组可让他们拥有与 docker 守护进程交互的权限。这包括以 root 身份启动容器。因此,添加到该docker组的任何用户都必须是可信的。

请注意,docker组用户可以将主机挂载/到容器内,从而拥有对整个主机文件系统的 root 访问权限。因此需要信任。

简而言之,答案是“如何让用户始终以自己的用户 ID 运行 docker 容器”是:要求他们这样做。告诉他们总是调用docker run

docker run --user=$(id -u):$(id -g) ...

包括uidgid解决了您的第二个问题。注意:也可以在定义图像的 DockerFile 中指定 USER,但随后命名容器内定义的 uid。

答案2

Docker 在系统范围内运行,而不是在特定用户上运行。这意味着任何用户docker run都将以 root 身份使用 docker 服务运行。

如果您在 Docker 中看到您的 ID,这可能是因为您的 ID 为 1000,这是第一个用户 ID。许多 Docker 使用特定帐户运行自己的服务,该帐户可能大多数时候使用相同的 ID。

相关内容