在非特权容器中挂载 ZFS 数据集

在非特权容器中挂载 ZFS 数据集

首先介绍一下我的配置:

  • 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 和用户命名空间来使容器看起来正常。

我的主机中的 <code>ps -efH</code> 屏幕截图。

请注意,容器下方的所有内容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

相关内容