LXC:如何将文件夹从主机挂载到容器?

Dav*_*rks 26 ubuntu mount lxc

我正在尝试将主机上的文件夹挂载到 LXC 容器。

主机/mnt/ssd/solr_data创建了一个文件夹(目前在根文件系统上,但稍后我将在那里安装一个 SSD 驱动器,所以我正在为此做准备)。

我希望该文件夹像/data在容器中一样安装。

所以在容器 fstab 文件中,我有以下内容:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        ext4    defaults,noatime        0       0
Run Code Online (Sandbox Code Playgroud)

但这是不行的,我在启动容器时遇到此错误:

lxc-start: No such file or directory - failed to mount '/mnt/ssd/solr_data' on '/usr/lib/x86_64-linux-gnu/lxc//data'
lxc-start: failed to setup the mounts for 'Solr4StandAlone'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'Solr4StandAlone'
Run Code Online (Sandbox Code Playgroud)

lit*_*ude 19

要在容器中自动创建目录,您还create=dir可以在 fstab 中添加选项:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind,create=dir
Run Code Online (Sandbox Code Playgroud)

编辑:这是特定于 LXC 的。看到这个线程

就像我们已经有了“可选”一样,这增加了两个新的 LXC 特定的挂载标志:

  • create=dir(将在路径上做一个 mkdir_p)

  • create=file(将在目录名上执行 mkdir_p + 在路径上执行 fopen)

这是由一些非特权容器所需的绑定安装驱动的。

  • 确实......看起来它只适用于lxc。请参阅 [lxc-devel ML 上的此线程](https://lists.linuxcontainers.org/pipermail/lxc-devel/2013-December/006444.html) (2认同)

Mau*_*043 17

/var/lib/lxc/Solr4StandAlone/config添加一行阅读:

lxc.mount.entry = /mnt/ssd/solr_data  /var/lib/lxc/Solr4StandAlone/rootfs/data none bind 0 0
Run Code Online (Sandbox Code Playgroud)

然后再次lxc-stop停止您的容器和lxc-start容器。

这就是所需要的。

ref:参考链接

  • 您的解决方案应该得到更好的审查,因为它适用于非特权 LXC 容器工具。在这种情况下,其他的将不起作用。并且可能需要调整 selinux/apport 以允许他们的方法。+1为您的解决方案! (2认同)

Dav*_*rks 11

/data在安装正常工作之前,我必须在本地容器中创建文件夹。

我还使用了这个 fstab 条目:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind     0       0
Run Code Online (Sandbox Code Playgroud)


小智 11

截至 2015 年 9 月 30 日,安全补丁导致的更改中断安装到配置文件中带有 lxc.mount.entry 的绝对路径。

相反,您可以使用相对路径

 lxc.mount.entry = /mnt/ssd/solr_data data none bind 0 0
Run Code Online (Sandbox Code Playgroud)

请参阅:https : //wiki.debian.org/LXC#Bind_mounts_inside_the_container


小智 6

由于 LXC 随着时间的推移发生了变化,这可能非常简单,但它让我有点难受,所以想做出贡献。我还为此创建了一个要点,因此我可以记住自己,但只需使用 lxc config device 即可。

sudo lxc config device add Solr4StandAlone sdb disk source=/var/lib/lxc/Solr4StandAlone/rootfs/data path=mnt/ssd/solr_data
Run Code Online (Sandbox Code Playgroud)

注意由于@biscuitNinja 提到的更改,将前斜杠从路径参数中删除很重要

将目录从容器挂载到主机