运行 OCI 容器作为普通用户

Running OCI Containers as regular users

对于许多开发工具,我发现将它们安装在容器中并在其中进行构建和测试很有用。通过一些包装脚本 assemble 快速增长的命令行,运行 即使是 GUI (X-windows) 应用程序也不会太难 IDE .

但是,让用户访问系统 docker 守护进程实例实际上是给他们 root 权限,因为他们可以 运行 容器作为 root 并在其中安装主机文件系统的任何部分。在开发人员机器上这通常不是问题,因为主要用户已经拥有完全的 sudo 权限,但在一些共享机器上它可能是。

现在 runc,docker 下实际创建容器的工具,能够使用用户和子用户 运行设置非根用户。然而,这并没有提供任何从存储库下载图像和管理它们的方法。并且 Docker 守护程序可以配置为 运行 作为特定用户,但不作为请求它们的用户启动容器。

那么有没有什么方法可以让系统上的任何用户都可以 运行 容器作为自己的子用户,但仍然可以访问注册表?

我见过在这些条件下构建容器的工具,例如img,这确实 运行 runc 在子用户的幕后,但除非我遗漏了什么,否则它没有方便的方法来 运行 和管理构建的容器。大概假设它们将包含系统服务,但我想使用容器作为特定用户任务的罐装环境。

您可以使用 podman 而不是 docker,普通用户无需升级权限即可 运行。在使用它之前,您可能需要设置(如 root)的唯一一件事是 subuid/subgid 映射(请参阅安装说明)。此工具的 CLI 类似于 Docker 的 CLI(podman pullpodman run 等),它也能够使用 Docker 个注册表。

some limitations 用于无根容器,但在大多数情况下,这已经足够了。