如何在 podman 中设置挂载文件夹权限 摘要重现步骤用例

问题描述

摘要

当我将一个文件夹安装到我的容器并且该文件夹的路径尚未在客户端上创建时,podman 将为我创建它。我可以在我的主机上设置挂载文件夹的权限以将其与容器用户匹配,但创建的路径文件夹没有相同的权限。

重现步骤

例如,让我们假设在我的图像中用户的主目录是空的。然后我会在我的主机上做:

$ mkdir foo
$ podman unshare chown 1000:100 foo
$ podman run -v $PWD/foo:/home/myuser/bar/foo:z [...] some/image:latest

这将在我的容器上产生:

~ # ls -la
drwxr-xr-t    3 root     root          4096 Jan 28 12:43 bar
~ # cd bar
~/bar # ls -la
drwxrwxr-x    2 1000     users         4096 Jan 28 12:42 foo
~/bar # 
  • 这种行为是故意的吗?
  • 有没有办法告诉 podman 创建与目标文件夹具有相同权限的路径?

我可以想象一个变通方法,但如果我能在运行命令中告诉它会很好。

用例

就我而言,我尝试直接从 docker.io 运行不同的 jupyter 笔记本作为一次性容器。但我确实想分享用户设置。当容器装载卷时,用户设置文件夹不存在。所以 podman 会创建它们,但是作为 root。所以jupyter用户无法访问podman创建的文件夹,会失败。

  • 我可以从图像创建一个 Buildfile 并在 buildphase 中创建文件夹。但我一直使用不同的图像,我不想为我的所有用例创建自定义图像。
  • 我可以将卷挂载到父文件夹,但各种不同的东西都存储在那里,我不想将其共享给所有不同的容器。
  • 我无法在初始启动后处理这些容器,但我不知道何时要重用此容器,如果有的话...

解决方法

也许可以使用 jupyter 命令行选项将 --uidmap 用户映射到您的用户?

(未经测试)

$ mkdir foo
$ jupyterUID=1234  # Replace 1234 with the correct UID for the jupyter user
$ podman run -v $PWD/foo:/home/myuser/bar/foo:z [...] --uidmap=0:1:$jupyterUID --uidmap=$(expr $jupyterUID + 1):$(expr $jupyterUID + 1):$(expr 65536 - $jupyterUID - 1) --uidmap=${jupyterUID}:0:1 some/image:latest

我认为当容器以容器 root 用户身份启动,然后以另一个用户身份运行程序时,需要这样的事情。如果该其他用户将在绑定挂载目录中写入文件,则这些文件将由主机上的普通用户拥有。不过,我不知道您的 Jupyter 容器映像是否是这种情况。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...