对于内部包含 systemd 的 nspawn 容器,“无法获取 shell PTY:协议错误”

Ant*_*ton 3 containers systemd

我创建容器

# debootstrap --variant=minbase --include=systemd,iproute2 buster "/var/lib/machines/test"
Run Code Online (Sandbox Code Playgroud)

然后我运行它:

# systemd-nspawn --machine test
Run Code Online (Sandbox Code Playgroud)

仅用于测试目的。容器启动,当我尝试访问它时,machinectl出现错误:

# machinectl shell test
Failed to get shell PTY: Protocol error
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索后,我意识到有一个旧错误导致了这种行为,但这在systemd v226中得到了修复,并且/usr/bin/systemd --version在我的 debian 上显示了版本 246。

我可以使用“非 systemd 容器”方法进入容器,但是我的容器运行 systemd,我应该能够使用machinectl.

Ant*_*ton 7

看来我失踪dbus 在集装箱里了

# chroot /var/lib/machines/test apt install dbus
Run Code Online (Sandbox Code Playgroud)

或者从头开始使用:

# debootstrap --variant=minbase --include=systemd,dbus buster "/var/lib/machines/test"
Run Code Online (Sandbox Code Playgroud)

两者都解决了问题。