我一直在 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
都是gid
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
在容器中使用将所有权更改为适当的所有权uid
,并gid
适用于容器中的用户。
附注:将容器中的所有权更改为例如具有uid
33 的用户后,您将在主机上看到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