Vou dissipar alguns mitos aqui.
This is just a bad idea. I'm sorry. – Jacob Mar 5 at 20:30
Eu não vejo como isso é uma má ideia. É realmente apenas um chroot dentro de um chroot. Por um lado, pode diminuir o desempenho de alguma forma insignificante (nada comparado a executar uma VM dentro de uma VM). Por outro lado, é provável que seja mais seguro (por exemplo, mais isolado do sistema host raiz e seus constituintes).
Do you actually have a real reason to do this? Please remember that questions here should be about actual problems that you face. – Zoredache Mar 5 at 21:52
Concordo 100% com o comentário seguinte do poster. Além disso, acho que é seguro supor que todos que postarem uma pergunta aqui provavelmente pensam que têm uma razão real para fazer isso.
I think, that lxc should be able to simplify VM migration(and backup+recovery too). But I'm not sure about cases, when there is no access to host OS(cheap vps for example). – Mikhail Mar 6 at 11:17
Na verdade, deparei com essa pergunta em junho, quando eu mergulhei no LXC para projetos de PaaS / IaaS e fiquei particularmente interessado na capacidade de permitir que os usuários emulassem ambientes de nuvem para fins de desenvolvimento.
LXCeption. We're too deep. – Tom O'Connor Mar 6 at 22:46
Eu ri um pouco quando li este, mas esse não é o caso:)
De qualquer forma, eu finalmente configurei um ambiente VirtualBox com uma instalação padrão do Ubuntu 12.04 LTS Server Edition depois de ler tudo isso, pensando que isso era 100% possível. Depois de instalar o LXC, criei um novo contêiner e instalei o LXC dentro do contêiner com o apt-get. A maior parte da instalação progrediu bem, mas resultou em erro, eventualmente devido a um problema com o pacote cgroup-lite, cuja tarefa inicial falhou ao iniciar após o pacote ter sido instalado.
Depois de pesquisar um pouco, deparei-me com este artigo excelente em stgraber.org (os itens estão escondidos sob a seção "Container Nesting"):
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
A instalação dessa política do AppArmor e a reinicialização do daemon resolveram o problema (não se esqueça de alterar os intervalos de rede!). Na verdade, achei que um snippet específico era tão importante que espelhei o link apenas para o caso de o artigo ficar off-line.
Depois disso, sudo /etc/init.d/cgroup-lite start
foi bem-sucedido e foi tranquilo.
Então, sim, é possível iniciar um contêiner LXC dentro de outro contêiner LXC:)