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

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

我一直在 Ubuntu 14.04 上尝试使用 LXC/LXD,一切都运行良好。我只需要弄清楚如何让共享目录在主机和容器之间工作,这样我就可以一劳永逸地抛弃 Virtualbox。

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

它提供了说明,但我总是收到错误。

有人知道任何简单、清晰的说明来实现这个功能吗?任何帮助都非常感谢。

答案1

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

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

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

并检查您想要与之共享目录的容器的所有者。在我的例子中,和uid都是gid100000。

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

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在容器中使用将所有权更改为适当的所有权uid,并gid适用于容器中的用户。

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

答案2

这是该问题的最新答案。

将主机文件夹挂载/var/www/var/test在容器中。

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

答案3

您可以分配额外的设备到容器,这些可以是主机可访问的文件夹。

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

注意,这<device>只是您指定的任意名称,它将作为后续设备管理的ID。

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

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

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

lxc config set <container> security.privileged true

目前我尚不清楚这种方法对主机安全的全部影响,但似乎在某种程度上被虚拟化所“控制”。实际风险取决于您将如何使用容器以及为什么使用容器。请参阅技术说明https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers

还请注意,如果您通常以非 root 用户身份在容器中操作,则这种方法可能最有效,例如,如果您使用...进行连接。

lxc exec zesty -- su --login ubuntu

答案4

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

您可以在这里找到一个非常有用的要点:

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

相关内容