我想从无根 podman 容器内访问主机系统上的目录。当使用带有 podman 无根容器的外部卷时,访问外部卷的用户具有调用 podman 的用户的 subuid 和 subgid。哪个用户 id 取决于调用用户和 OCI 容器中的内部用户的子 id 范围。我发现让这个子用户访问外部卷的唯一方法(除了让主机系统上的每个人都可以写该文件夹)是chown
直接访问该子用户 ID 的目录。有没有更好的方法来做到这一点,它不涉及我手动检查/etc/subgid
以及容器中的用户?
我想从无根 podman 容器内访问主机系统上的目录。当使用带有 podman 无根容器的外部卷时,访问外部卷的用户具有调用 podman 的用户的 subuid 和 subgid。哪个用户 id 取决于调用用户和 OCI 容器中的内部用户的子 id 范围。我发现让这个子用户访问外部卷的唯一方法(除了让主机系统上的每个人都可以写该文件夹)是chown
直接访问该子用户 ID 的目录。有没有更好的方法来做到这一点,它不涉及我手动检查/etc/subgid
以及容器中的用户?
备选方案 1
Podman 3.1.0(2021 年 3 月发布)
:U
为--volume
命令行选项引入了新的后缀。从手册页引用:
:U 后缀告诉 Podman 根据容器内的 UID 和 GID 使用正确的主机 UID 和 GID,以递归方式更改源卷的所有者和组。
备选方案 2(推荐)
您可以将容器 UID 映射到当前拥有卷中文件的主机 UID,而不是更改所有权。的命令行选项是
--uidmap
和--gidmap
:该
--uidmap
选项为用户提供了一种将容器 UID 映射到主机 UID 的方法。容器 UID 虽然没有直接映射到主机 UID。相反,映射发生在两个映射步骤中:容器 UID -> 中间 UID -> 主机 UID
第一个映射步骤可以使用--uidmap进行配置。数量指定将被映射的连续 UID 的数量。
例如,如果数量为 4,则第一个映射步骤如下所示:
第二个映射步骤是由 podman 从文件/etc/subuid的内容和启动 podman 的用户的 UID 导出的。
第二个映射步骤:
(从/etc/subuid中使用的 SUBUID 取自属于启动 podman 的用户的范围)
2022-02-14 更新
我在 Podman 文档中写了关于备选方案 2的故障排除提示。