我有一个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