当我将一个文件夹安装到我的容器并且该文件夹的路径尚未在客户端上创建时,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 #
我可以想象一个变通方法,但如果我能在运行命令中告诉它会很好。
就我而言,我尝试直接从 docker.io 运行不同的 jupyter 笔记本作为一次性容器。但我确实想分享用户设置。当容器装载卷时,用户设置文件夹不存在。所以 podman 会创建它们,但是作为 root。所以jupyter用户无法访问podman创建的文件夹,会失败。
答案 0 :(得分:0)
也许可以使用 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 容器映像是否是这种情况。