Como faço o background de um container systemd-nspawn?

4

Eu uso systemd-nspawn para executar alguns contêineres. Eu posso tê-los iniciado em segundo plano usando systemctl start systemd-nspawn@foo . Na ocasião, no entanto, começo com systemd-nspawn -bD foo . Não consegui encontrar uma maneira de enviá-lo para o fundo. Fechar o terminal apenas mata o contêiner como machinectl list mostra. Posso fazer isso e, em caso afirmativo, como?

Eu entendo que um container é muito mais que um único processo, mas nesse sentido, o efeito esperado é o mesmo que backgroundear um processo - eu quero o container rodando, mas meu shell original me foi devolvido.

    
por muru 22.06.2015 / 01:41

2 respostas

1

Ok, então, pelo que vale a pena, o seguinte foi bem sucedido para mim:

sudo systemd-nspawn -bxD/

Praticamente idêntico ao seu, exceto que não atribuo o nome machine e obtenho um instantâneo -x ephemeral btrfs do meu / para a raiz do contêiner.

Isso trouxe o getty do contêiner no meu terminal e eu entrei no login e tudo.

Confesso que fiquei um pouco confuso por um tempo, mas depois de cutucar systemctl no contêiner com zsh < tab > conclusão eu vim com (executado a partir do recipiente) :

systemctl stop console-getty.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or other units.
Authenticating as: mikeserv
Password:
==== AUTHENTICATION COMPLETE ===

O que levou a máquina a entregar o controle do terminal. A única coisa é que eu comecei com sudo - que também recebe sua própria camada de controle de terminal para autenticar em primeiro lugar. Isso me deixou com um terminal em branco, e nenhuma quantia de kill -CONT "$(pgrep ksh)" estava me fazendo bem algum. E então eu fiquei novamente perplexo por um momento ou dois, mas (em outro terminal) ...

sudo fuser -v /dev/pts/*
                     USER        PID ACCESS COMMAND
/dev/pts/0:          mikeserv   8347 F.... zsh
                     root      18003 F.... sudo
/dev/pts/13:         mikeserv   9553 F.... zsh
                     mikeserv  16838 F.... ksh
                     root      17657 F.... sudo
                     root      17658 F.... systemd-nspawn
/dev/pts/14:         root      17675 F.... systemd

Deu-me a lista acima, e então pensei - que diabos?

sudo kill -STOP 17657

E - eis que - eu tive ksh de volta no terminal original. Para finalizar, precisei verificar se ainda posso acessar o machine , embora, é claro, caso contrário, seria inútil:

machinectl -l
MACHINE                    CLASS     SERVICE
localhost-35ceaa76b1306897 container nspawn

Ok ...

sudo machinectl login localhost-35ceaa76b1306897
Connected to machine localhost-35ceaa76b1306897. 
Press ^] three times within 1s to exit session.

Arch Linux 4.0.7-2-ARCH (pts/0)

localhost-35ceaa76b1306897 login:

E eu recebi outro getty em outro terminal!

    
por 05.07.2015 / 22:40
2

Eu tenho um problema semelhante. Minha abordagem é usar dtach para controlar a anexação e desanexação do terminal que está executando o contêiner. Então dentro do container eu posso rodar tmux / screen etc.

machinectl permitirá que você execute contêineres na inicialização, mas até o momento desta publicação, o debian stable não possui uma versão de systemd que inclua esse recurso.

    
por 14.12.2015 / 08:54