実行中のsystemdコンテナ内でコマンドを実行する方法

実行中のsystemdコンテナ内でコマンドを実行する方法

systemd利用可能な実行中のコンテナがありますmachinectl login <container>。まず、ログインせずにコマンドを実行してから、ログアウトせずにコンテナ内で直接コマンドを実行するにはどうすればよいですか?

systemdこれを言うもう一つの方法は、次のようなものを探していることです。

$ docker exec <container> <command> 

または

$ ssh <host> <command>

答え1

努力する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

から抜粋マンページ:

--machine=スイッチと一緒にシェル(下記参照)またはsystemd-run(1)を使用して、対話的にまたはバックグラウンドで個々のコマンドを直接呼び出します。

(このコマンドはshell以後利用可能でした。v225)

答え2

システムが存在しない場合machinectl shell(CentOS 7 Atomicのsystemd v219など)、machinectl login何らかの理由で失敗した場合は、次のように直接シェルをインポートしたりコマンドを実行したりできますnsenter

例:

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

関連情報