Podman 无根容器:访问外部卷很麻烦

Podman 无根容器:访问外部卷很麻烦

我想从无根 podman 容器内部访问主机系统上的目录。当将外部卷与 podman 无根容器一起使用时,访问外部卷的用户具有调用 podman 的用户的 subuid 和 subgid。哪个用户 ID 取决于调用用户和 OCI 容器中的内部用户的子 ID 范围。我发现授予此子用户访问外部卷的唯一方法(除了使文件夹可由主机系统上的每个人写入)是直接将目录传递chown给该子用户 ID。有没有更好的方法来做到这一点,而不需要我手动检查/etc/subgid容器中的用户?

答案1

方案 1

:UPodman 3.1.0(2021 年 3 月发布)在--volume命令行选项中引入了新的后缀。

引自手册页

:U 后缀告诉 Podman 根据容器内的 UID 和 GID 使用正确的主机 UID 和 GID,以递归方式更改源卷的所有者和组。

方案 2(推荐)

您可能无需更改所有权,只需将容器 UID 映射到当前拥有卷中文件的主机 UID 即可。该操作的命令行选项为--uidmap--gidmap

--uidmap选项为用户提供了一种将容器 UID 映射到主机 UID 的方法。容器 UID 并非直接映射到主机 UID。相反,映射通过两个映射步骤进行:

容器 UID -> 中间 UID -> 主机 UID

第一个映射步骤可以配置为--uidmap。 这数量指定将映射的连续 UID 的数量。

例如数量为 4 则第一个映射步骤如下:

容器 UID 中间 UID
container_uid 中间体
container_uid+ 1 中间_uid + 1
container_uid+ 2 中间_uid + 2
container_uid+ 3 中间_uid + 3

第二个映射步骤由 podman 根据文件内容得出/etc/subuid以及启动 podman 的用户的 UID。

第二次映射步骤:

中间 UID 主机 UID
0 启动 podman 的用户的 UID
1 第一个 SUBUID 来自/etc/subuid
2 第二个 SUBUID 来自/etc/subuid
3 第三个 SUBUID 来自/etc/subuid
第 n 个 第 n 个 SUBUID 来自/etc/subuid

(使用的 SUBUID 来自/etc/subuid取自启动 podman 的用户的范围)

更新 2022-02-14

我写了一个故障排除提示关于方案 2在 Podman 文档中。

相关内容