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

use*_*227 21 lxc lxd

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

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

它提供了说明,但我只是不断收到错误。

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

ph0*_*nix 22

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

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

sudo ls -l /var/lib/lxd/containers
Run Code Online (Sandbox Code Playgroud)

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

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

sudo chown 100000:100000 /tmp/share_on_host
Run Code Online (Sandbox Code Playgroud)

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

lxc config device add mycontainer sharedtmp disk \
                  path=/tmp/share_on_guest source=/tmp/share_on_host
Run Code Online (Sandbox Code Playgroud)

现在,在容器中,您将看到该目录/tmp/share_on_guest(我不建议挂载您的目录,/tmp因为它被系统用于其他内容并具有特殊权限)归 root 所有。从这里开始,您可以chown在容器中使用来将所有权更改为适当的uid并且gid适合您在容器中的用户。

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

  • 我意识到这是一个老问题+答案,但在 Ubuntu 18.04 中,我不必搞乱任何权限。只需添加带有“lxc config”的文件夹,它就像一个魅力! (2认同)

小智 6

这是此问题的更新答案。

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

lxc config device add mycontainer vartest disk source=/var/www path=/var/test
Run Code Online (Sandbox Code Playgroud)


use*_*227 0

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

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

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

  • 请注意,从安全角度来看,使事物可写通常是一个坏主意。您可能应该考虑在主机路径上使用 POSIX ACL,通过为该 uid 添加特定的 ACL 向容器的用户授予访问权限,然后为也需要写入访问权限的任何其他主机用户授予访问权限。 (5认同)