我正在尝试运行一个 Podman 容器,其卷绑定到主机上的数据目录,其中该数据目录具有有限的权限。即使我的用户帐户具有访问权限,我也会从容器内部收到“权限被拒绝”的消息。
数据目录
/mnt/data
由本地组拥有:
$ ls -lah /mnt
drwxrwx--- root comp data
我的本地用户是该组的成员:
$ whoami
robert
$ groups
robert comp
我可以按预期访问
/mnt/data
。
但现在我尝试通过无根容器访问该文件夹:
podman run --rm -it -v /mnt/data:/mnt/data ubuntu
我无法进入该文件夹:
(container) # ls -lah /mnt/data
ls: cannot open directory '/mnt/data/': Permission denied
一些更仔细的检查:
(container) # ls -lah /mnt
drwxrwx--- nobody nogroup data
(container) # whoami
root
(container) # groups
root
好吧,根据这个我确实无法访问我的数据文件夹(假设容器中的 root 不是真正的超级用户)。
如何让正确的权限也适用于容器内部?
--userns=keep-id
,但这对我不起作用:$ podman run --rm -it -v /mnt/data:/mnt/data --userns=keep-id ubuntu
(container) # whoami
ubuntu
(container) # groups
ubuntu
(container) # ls -lah /mnt
drwxrwx--- nobody nogroup data
我现在已经成为不同的用户,但我仍然没有我需要的组。
--gidmap
将本地
comp
组映射到容器
root
组:
$ id -u
1000
$ getent group comp
1003
$ podman run --rm -it -v /mnt/data:/mnt/data --uidmap=0:1000:1 --gidmap=0:1003:1 ubuntu
(container) # ls -lah /mnt
drwxrwx--- nobody nogroup data
(container) # ls -lah /mnt/data
ls: cannot open directory '/mnt/data/': Permission denied
keep-groups: 找到了一些解决方案
$ podman run --rm -it -v /mnt/data:/mnt/data --userns=keep-id --group-add=keep-groups ubuntu
(container) # whoami && groups && id -u && id -g && getent group nogroup
ubuntu
ubuntu nogroup
1000
1000
nogroup:x:65534:
(container) # ls -lah /mnt
drwxrwx--- nobody nogroup data
(container) # ls -lah /mnt/data
-rw-rw-r-- ubuntu ubuntu file.txt
现在看来我由容器用户创建了 nogroup
的成员,当我试图让我的主机用户/组落入容器时,这不是我所期望的。这对我来说不是真正的解决方案,因为我的真实图像的功能与此不同
nogroup
。