首先介绍一下我的配置:
- Ubuntu 15.10
- ZFS 池已创建
- 存储在 pool/lxc 中的 LXC 容器
- 数据集创建于
pool/mydataset
所有者user1
现在我需要一个容器来访问中的文件/文件夹pool/mydataset
。我尝试了以下操作:
user1
在容器内创建用户编辑
pool/lxc/mycontainer/config
并添加:lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
当我启动容器时,数据集已被挂载,但ls -la /mnt/mydataset
容器中显示nobody:nogroup
的不是user1:user1
,这意味着所有文件都是只读的。
知道如何在挂载目录中获取正确的权限吗?
答案1
我也遇到过同样的情况。在我的案例中,原因是要绑定挂载的文件系统由 UID:GID 拥有在主机范围内。
根据定义,非特权容器使用正常范围之外的 UID 和用户命名空间来使容器看起来正常。
请注意,容器下方的所有内容init
请注意,从主机上看,在容器内,PID1 是 UID root,正如预期的那样。
这是什么意思?如果在主机中,您有一个由普通用户(可能是 root,也可能是普通用户)拥有的文件系统,然后将其绑定挂载到容器中,则 UID(存储为整数)在容器内毫无意义。
此外,由于容器看到的 UID 甚至不属于其用户命名空间,容器内的 root 也无法chown
即使是。
解决方案:在主机中,chown
文件属于容器内的根目录。在我的例子中,如上图所示,我必须:
tank/mydataset
在/tank/mydataset
主机上安装chown 1000000:1000000 /tank/mydataset
- (在容器配置文件中)
lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0