如何在正在运行的 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

摘自联机帮助页:

使用 shell(见下文)或 systemd-run(1) 以及 --machine= 开关以交互方式或在后台直接调用单个命令。

(该命令shell自可用以来v225

答案2

对于没有系统machinectl shell(例如 CentOS 7 Atomic 上的 systemd v219)或在machinectl login因任何原因失败的情况下,您可以使用以下命令直接获取 shell 或运行命令nsenter

例子:

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

相关内容