是否可以在LXC容器中启动LXC容器?


21

是否可以在另一个LXC容器中启动LXC容器?


1
您实际上有这样做的真正理由吗?请记住,这里的问题应该与您面临的实际问题有关。
Zoredache 2012年

6
我认为,lxc应该能够简化VM迁移(以及备份和恢复)。但是我不确定在什么情况下无法访问主机操作系统(例如便宜的vps)。
米哈伊尔(Mikhail)2012年

Answers:


45

我将在这里消除一些神话。

这只是一个坏主意。对不起。– 3月5日雅各布20:30

我不认为这是一个坏主意。它实际上只是chroot中的chroot。一方面,它可能以某种微不足道的方式降低性能(与在虚拟机内部运行虚拟机相比,什么都没有)。另一方面,它可能更安全(例如,与根主机系统及其组成部分更隔离)。

您实际上有这样做的真正理由吗?请记住,这里的问题应该与您面临的实际问题有关。– Zoredache 3月5日21:52

我100%同意发布者的以下评论。此外,我认为可以安全地假设在此发布问题的每个人都可能认为他们有这样做的真实理由。

我认为,lxc应该能够简化VM迁移(以及备份和恢复)。但是我不确定在什么情况下无法访问主机操作系统(例如便宜的vps)。– 3月6日,米哈伊尔11:17

实际上,我早在6月份首次涉足PaaS / IaaS项目的LXC时就遇到了这个问题,我对允许用户模拟用于开发目的的云环境的能力特别感兴趣。

LXCeption。我们太深了。– 3月6日,汤姆·奥康纳(Tom O'Connor)22:46

当我读到这篇文章时,我笑了一点,但事实并非如此:)

无论如何,在阅读完所有这些内容之后,我最终建立了一个VirtualBox环境,并安装了Ubuntu 12.04 LTS Server Edition的库存安装,并认为这是100%可行的。安装LXC之后,我创建了一个新容器,并使用apt-get在容器内安装了LXC。大多数安装进展顺利,但最终由于cgroup-lite软件包出现问题而导致错误,该软件包在安装软件包后无法启动其upstart作业。

经过一番搜索,我在stgraber.org上看到了这篇精美的文章(这些好东西隐藏在“容器嵌套”部分下):

sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-host-container -t ubuntu
sudo wget https://www.stgraber.org/download/lxc-with-nesting -O /etc/apparmor.d/lxc/lxc-with-nesting
sudo /etc/init.d/apparmor reload
sudo sed -i "s/#lxc.aa_profile = unconfined/lxc.aa_profile = lxc-container-with-nesting/" /var/lib/lxc/my-host-container/config
sudo lxc-start -n my-host-container
(in my-host-container) sudo apt-get install lxc
(in my-host-container) sudo stop lxc
(in my-host-container) sudo sed -i "s/10.0.3/10.0.4/g" /etc/default/lxc
(in my-host-container) sudo start lxc
(in my-host-container) sudo lxc-create -n my-sub-container -t ubuntu
(in my-host-container) sudo lxc-start -n my-sub-container

安装该AppArmor策略并重新启动守护程序就可以了(尽管不要忘记更改网络范围!)。实际上,我以为特定的片段非常重要,以至于我将其镜像为@ http://pastebin.com/JDFp6cTB,以防万一文章离线。

之后,sudo /etc/init.d/cgroup-lite start成功了,航行顺利。

因此,是的,可以在另一个LXC容器内部启动一个LXC容器:)


1
此配置几乎禁用了AppArmor保护(通过无限制运行容器)。AppArmor的目的是“保护主机免遭容器内特权的意外滥用”。此配置几乎打开了由嵌套lxc容器利用的lxc主机。嵌套的LXC主机也可能无法为其容器提供保护。通常,不建议禁用此保护。
Reece45

是否有可行的安全方法在lxc中运行lxc?
Mascarpone 2014年

10
实际用例:我有一个运行jenkins的LXC容器,并且我希望jenkins在执行集成测试之前能够运行LXCs容器。替代方法:在LXC外部运行jenkins,或通过ssh在主机上创建LXC容器(丑陋)。
Giovanni Toraldo 2014年

13

使用Ubuntu 14.04(可信任),您只需在父容器配置中添加以下内容:

lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting

参考:https : //help.ubuntu.com/lts/serverguide/lxc.html#lxc-basic-usage (搜索“嵌套”)

在启动之前,请确保已预先配置了网络,以避免长时间的停顿,直到出现登录屏幕!

高温超导


1
完美运行-谢谢!对于像我这样可能尚未将上一行放入其中的父容器配置~/.config/lxc/default.conf的用户,在创建该容器的用户的帐户下添加一个文件并将其添加到这两行就可以了。
布兰登·罗德斯

早在2017年!最近,我必须在lxc内为“ enterprise-y”应用设置docker-效果很好,但不要问...
Lester Cheung

1

另外...您知道您现在可以将所有Openstack安装到单个LXC容器中。然后将每个Openstack“服务”(nova,swift等)都安装到“主/父”容器内的“嵌套” lxc容器中。

需要花一些时间安装所有内容,但安装完成后,您将在便携式计算机或台式机上进行一个不错的测试OpenStack环境进行试验。

如果要停止OpenStack,只需lxc-stop停止主/父容器即可重新启动Openstack。

请参阅: Openstack Single Installer说明


1

是的,您可以进行嵌套的LXC容器,尽管有第一条评论,但在某些情况和用例中,嵌套容器肯定有用。请参阅Stephane Graber的LXC博客的第10部分,尤其是“容器嵌套-

Stephane Graber的LXC十部分系列

用例:假设您需要多租户LXC环境。为每个人或组织创建1个主容器,确保通过将2个cmds添加到LXC容器配置文件来启用嵌套。接下来,在每个主容器中创建您的嵌套子容器,在其中安装每个组所需的应用程序,桌面等。请注意,尽管“主”容器的默认网络为10.0.3.x,但默认情况下,嵌套的容器将为“ 10.0.4.x”(如果需要,可以更改任何一个)。

使用嵌套LXC 的最大优势是什么?如果您用lxc-stop停止了Master容器并进行了lxc-clone,那么您不仅可以克隆Master容器,还可以克隆所有子容器...这对于快速备份非常方便。如果您想使用CRIU进行LXC实时迁移,这种方法也很方便。当您将一个主容器迁移到另一台计算机时,您实际上也在迁移它以及所有嵌套的容器。

最后,对于一个很酷的LXC嵌套示例,Stephane Graber等人在一个LXC容器中都使用LXC,BPG和OSPF构建了一个用于“ Internet”的模拟器。在1个LXC“主或父” LXC容器内部,有512个嵌套LXC容器,每个容器都运行Quagga进行BGP / OSPF路由。那些512个Internet“节点”共同模拟了Internet。2014年NSEC安全会议上使用了此实现,所有与会者都可以使用Internet进行安全性试验。

其来源在Githug上,网址为: 2014 NSEC LXC模拟器,用于Internet github代码

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.