首先是关于我的配置的一些信息:
pool/mydataset
中创建的数据集由user1
拥有现在我需要一个容器来访问pool/mydataset
中的文件/文件夹。我尝试了以下几点:
user1
pool/lxc/mycontainer/config
=/ lxc.mount.entry /mydataset mnt/mydataset无rw,bind 0 0当我启动容器时,dataset被挂载,但是容器中的ls -la /mnt/mydataset
显示nobody:nogroup
而不是user1:user1
,这意味着所有文件都是只读的。
知道如何在挂载目录中获得正确的权限吗?
发布于 2018-04-08 07:55:50
我也有过同样的经历。在我的例子中,原因是要绑定的文件系统属于主机范围内的UID:GID。
根据定义,非特权容器在正常范围之外使用UID,并使用用户命名空间在容器中显示正常状态。
注意,容器的init
下面的所有内容都属于数值UID 1000000,从主机上可以看到。在容器中,PID1是UID,正如预期的那样。
那是什么意思?如果在主机上有一个普通用户(可能是root用户,可能是普通用户)拥有的文件系统,然后将其绑定到容器中,则UID(作为整数存储)在容器中没有意义。
此外,由于容器所看到的UID甚至不属于它的用户名称空间,即使是容器中的根也不能chown
这些文件。
解决方案:在主机中,chown
文件,以便它们属于容器内的根。就我而言,如上图所示,我不得不:
tank/mydataset
安装在主机上的/tank/mydataset
上chown 1000000:1000000 /tank/mydataset
lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0
https://serverfault.com/questions/757406
复制相似问题