Como detectar um sistema de contêineres LXC está pronto?

4

Eu estou tentando iniciar um contêiner LXC e, em seguida, executar um comando dentro dele. O problema é que, mesmo se o contêiner estiver no estado RUNNING, ele não concluiu toda a inicialização. Isso produz problemas com / tmp (e, eu acho, com outras inicializações).

Isso pode ser ilustrado com essa sequência de chamadas que cria um contêiner, inicia, aguarda seu estado RUNNING e executa alguns comandos; os comandos criam um arquivo / tmp / hello, mostram um dir, esperam um pouco e mostram novamente o dir:

lxc-clone -B overlayfs -s -o vm -n c1 ; lxc-start -n c1 ; lxc-wait -n c1 -s RUNNING ; lxc-attach -n c1 -- su -c "touch /tmp/hello; ls -la /tmp; sleep 5; ls -la /tmp" slave ; lxc-stop -n c1 ; lxc-destroy -n c1

cujo resultado é

Created container c1 as snapshot of vm total 16 drwxrwxrwt 1 root root 4096 May 24 09:37 . drwxr-xr-x 1 root nogroup 4096 May 24 09:37 .. drwxrwxrwt 2 root root 4096 May 22 21:19 .ICE-unix drwxrwxrwt 2 root root 4096 May 22 21:19 .X11-unix -rw-rw-r-- 1 slave slave 0 May 24 09:37 hello total 16 drwxrwxrwt 1 root root 4096 May 24 09:37 . drwxr-xr-x 1 root nogroup 4096 May 24 09:37 .. drwxrwxrwt 2 root root 4096 May 24 09:37 .ICE-unix drwxrwxrwt 2 root root 4096 May 24 09:37 .X11-unix

e mostra que o arquivo / tmp / hello é deletado por algum script de inicialização.

Como esperar dentro do contêiner até que o sistema seja totalmente inicializado? Além disso, como fazê-lo de fora do contêiner?

    
por anumi 24.05.2015 / 11:47

1 resposta

4

Para um contêiner que é executado no systemd, parece que isso funciona bem:

lxc-attach -n [CONTAINER NAME] -- systemctl isolate multi-user.target

Você provavelmente poderia aplicar a mesma lógica para um contêiner baseado em sysvinit ou upstart (executar um comando que bloqueia até que um nível de execução seja atingido), mas não posso dizer quais comandos podem fazer isso no topo de minha cabeça.

    
por 27.02.2017 / 07:55

Tags