LXC:如何将文件夹从主机安装到容器?


24

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

主机已/mnt/ssd/solr_data创建一个文件夹(该文件夹当前位于根文件系统上,但是稍后我将在其中安装SSD驱动器,因此我为此作了准备)。

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

因此,在容器fstab文件中,我具有以下内容:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        ext4    defaults,noatime        0       0

但这是不行的,启动容器时出现此错误:

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'

Answers:


16

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

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind,create=dir

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

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

  • create = dir(将在路径上执行mkdir_p)

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

这是由于非特权容器需要一些绑定安装而引起的。


1
mount这适用于什么版本?例如,我找不到mount(8)在Ubuntu 14.04上描述的选项。
0xC0000022L14年


2
确实……看起来仅适用于lxc。参见lxc-devel ML上的该线程
little-dude

14

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

lxc.mount.entry = /mnt/ssd/solr_data  /var/lib/lxc/Solr4StandAlone/rootfs/data none bind 0 0

然后lxc-stop停止容器,然后lxc-start再次停止容器。

这就是所需要的。

参考:参考链接


2
您的解决方案与无特权的LXC容器工具一起使用时,应该会得到更好的评估。其他情况在这种情况下将不起作用。可能需要对selinux / apport进行调整,以允许使用他们的方法。+1为您的解决方案!
惠更斯(Huygens)


9

自2015年9月30日起,由安全补丁引起的更改会破坏在配置文件中使用lxc.mount.entry安装到绝对路径的情况。

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

 lxc.mount.entry = /mnt/ssd/solr_data data none bind 0 0

参见:https : //wiki.debian.org/LXC#Bind_mounts_inside_the_container


很棒的补充,它可以作为答案,并且会被投票,所以人们很快就会看到它。感谢您添加!
David Parks

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

注意重要的是,由于@biscuitNinja提到的更改,请在路径参数前保留斜杠

将目录从容器挂载到主机


1

如果libvirt用于创建lxc容器,则可以使主机上的目录passthrough如下所示:

root@localhost:/# cat /etc/libvirt/lxc/my_container.xml
...
 <filesystem type='mount' accessmode='passthrough'>
    <source dir='<dir on host>'/>
    <target dir='<dir on container>'/>
 </filesystem>
....
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.