2

抽象的

当我将文件夹挂载到我的容器并且尚未在客户端上创建文件夹的路径时,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 创建文件夹。但是我一直使用不同的图像,我不想为我的所有用例创建自定义图像。
  • 我可以将卷挂载到父文件夹,但是各种不同的东西都存储在那里,我不想将它共享给所有不同的容器。
  • 初次启动后我无法处理这些容器,但我不知道我什么时候想重用这个容器,如果有的话......
4

1 回答 1

0

Maybe it is possible to map the jupyter user to your user with the --uidmap command-line option?

(untested)

$ 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

I think something like this is needed when the container starts as the container root user and then runs a program as another user. If that other user would write files in a bind-mounted directory, the files would be owned by your normal user on the host. I don't know, though, if that is the case with your Jupyter container image.

于 2021-01-29T18:42:55.090 回答