挂载 LXD 客户目录而不破坏数据和所有权

挂载 LXD 客户目录而不破坏数据和所有权

我已经创建了一个 LXD 客户机来托管我的网络服务器,并且为了轻松访问文档根目录,我执行以下操作:

lxc config device add guest sharedhtml disk path=/document/root/ source=/home/$USER/public_html

这做了两件事:

  • 完全替换/document/root/public_html/(所有默认网络服务器文件都消失了,为public-html空)
  • 破坏了/document/root所有权设置;我创建的目录和文件public_html/现在归nobody:nogroup

据我了解,这更像是反向挂载;不是挂载客户机的目录,而是将主机的目录强制反向挂载到客户机中。

如何在不破坏现有内容的情况下在主机中挂载客户目录,以便更改继承客户目录的所有权设置?

奖励:我该如何删除device正在挂载的目录?

答案1

要删除您创建的条目,请按照以下步骤操作:

lxc config device remove sharedhtml

现在看来 LXD 确实做了它应该做的事情。您运行的命令指示 LXD 将 /home/$USER/public_html 从主机挂载到容器中作为容器的 /document/root

由于 LXD 容器使用与主机不同的 uid/gid 映射运行,因此主机的文件所有权无法在容器内呈现,导致内核将这些文件显示为 nobody:nogroup。

目前没有任何机制可以将容器内的路径安装在主机上,而且我们不太可能很快添加这样的东西。

无论如何,在您的情况下,您可能应该做的是在主机上为您的 Web 服务器文件设置一个存储路径,然后将其设置为 LXD 中的设备磁盘条目,以便将其安装在容器内的正确位置。

然后在主机上设置 POSIX ACL,以便容器的 uid/gid 和您自己的用户都可以访问文件。

在大多数情况下,主机上的容器 uid 和 gid 将是 165536 + 容器内的 uid 或 gid。一种更简单的方法是让主机上的路径暂时为全球可写,然后在容器内的路径上写入一些内容,并确认谁在主机上显示为所有者。

相关内容