Como executar um comando dentro de um contêiner systemd em execução

6

Eu tenho um contêiner systemd em execução e posso fazer login nele com machinectl login <container> . Como posso executar um comando dentro do contêiner diretamente, ou seja, sem primeiro fazer login, executar o comando e fazer logout?

Outra maneira de explicar isso é que estou procurando o systemd equivalente de:

$ docker exec <container> <command> 

ou

$ ssh <host> <command>
    
por Ilari Scheinin 25.10.2015 / 10:02

2 respostas

4

Experimente systemd-run :

# systemd-nspawn -D <machine-root> -b 3 --link-journal host

# systemd-run --machine <machine-name> env
Running as unit run-1356.service.

# journalctl --machine <machine-name> -u run-1356 -b -q
Oct 30 07:45:09 jessie-64 systemd[1]: Started /usr/bin/env.
Oct 30 07:45:09 jessie-64 env[37]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Trecho da página de manual :

Use shell (see below) or systemd-run(1) with the --machine= switch to directly invoke a single command, either interactively or in the background.

(O comando shell disponível desde v225 )

    
por 30.10.2015 / 05:56
2

Para sistemas sem machinectl shell (por exemplo, systemd v219 no CentOS 7 Atomic) ou durante situações em que machinectl login falha por algum motivo, você pode obter um shell ou executar comandos diretamente usando nsenter :

Exemplo:

$ nsenter \
     --target=$(machinectl show --property Leader ipsec-libreswan | sed "s/^Leader=//") \
     --mount --uts --ipc --net --pid
    
por 11.09.2017 / 21:13