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