将共享主机目录添加到LXC / LXD容器

我一直在Ubuntu 14.04上试验LXC / LXD,它们都很棒。 我只需要弄清楚如何让我的主机和容器之间的共享目录工作,这样我就可以一劳永逸地抛弃Virtualbox。

我看过这个页面: https : //wiki.gentoo.org/wiki/LXD

这提供了说明,但我一直在收到错误。

有没有人知道任何简单明了的说明来使这个工作? 任何帮助非常感谢。

您提到的https://wiki.gentoo.org/wiki/LXD上的说明是正确的,但可能需要更多解释。

在主机上,首先检查存储容器数据的目录的所有权。 跑

 sudo ls -l /var/lib/lxd/containers 

并检查要与之共享目录的容器的所有者。 在我的情况下, uidgid都是100000。

接下来,使用这些更改要共享的目录的所有权:

 sudo chown 100000:100000 /tmp/share_on_host 

按照您在评论中指明的方式与容器共享目录:

 lxc config device add mycontainer sharedtmp disk \ path=/tmp/share_on_guest source=/tmp/share_on_host 

现在,在容器中,您将看到目录/tmp/share_on_guest (我不建议将您的目录挂载为/tmp因为系统用于其他内容且具有特殊权限)由root拥有。 从这里开始,您可以使用容器中的chown将所有权更改为容器中用户的相应uidgid

作为旁注,在将容器中的所有权更改为例如具有uid 33的用户之后,您将在主机上看到uid现在有100033,这是完全合理的。

您可以将其他设备分配给容器,这些设备可以是主机可访问的文件夹。

 $ lxc config ## display help ... lxc config device add [:]   [key=value...] Add a device to a container. ... 

请注意, 只是您指定的任意名称,将用作后续设备管理的ID。

例如,要将容器中的主机文件夹“./host”挂载为“/ mnt / host”…

 lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host 

仍有一个问题 – 如果您希望此文件夹可由主机和容器写入,则需要相应地配置所有权和权限。 LXD的默认模式使用户和组id值的数值范围虚拟化,这很复杂。 但是,有一个简单的解决方案 :通过将容器配置为使用与主机等效的权限运行来绕过此虚拟化…

 lxc config set  security.privileged true 

目前我不清楚这种方法对主机安全性的全面影响,但似乎有点“虚拟化”。 实际风险取决于您使用容器的方式和原因。 请参阅https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers上的技术说明

进一步注意,如果您通常作为非root用户在容器中操作,这种方法可能效果最好,例如,如果您附加…

 lxc exec zesty -- su --login ubuntu 
  • 有关配置的其他说明: https : //help.ubuntu.com/lts/serverguide/lxd.html

以下是此问题的更新答案。

将主机文件夹“/ var / www”作为“/ var / test”挂载到容器中。

lxc config device添加mycontainer vartest disk source = / var / www path = / var / test

我现在有一个有效的,安全的解决方案,使用LXD配置文件来处理容器和主机上的UID和GID之间的映射。

这里有一个非常有用的要点:

https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8