debootstrap
如果我有一个在运行时引导的目录,systemd-nspawn
我必须做什么才能使其内部systemd
正常工作?
$ sudo systemd-nspawn -D ./foo
Spawning container mschroot on /opt/foo.
Press ^] three times within 1s to kill container.
root@foo:~# systemctl
Failed to connect to bus: No such file or directory
如果我手动尝试,mount --bind
会收到不同的错误,
$ sudo mount --bind /proc /opt/foo/proc
$ sudo chroot /opt/foo/
root@x230:/# systemctl
Running in chroot, ignoring request.
在该 chroot 中安装了一个我想启动的服务?
答案1
如果您想使用容器systemd
内部的功能,systemd-nspawn
您需要做一些事情
dbus
在你的容器中- 您需要实际启动容器
systemd-nspawn --boot
答案2
systemd 在这里是正确的。您尝试从 chroot 运行它,但 chroot 有一组完全不同的路径、库和服务。允许你调用 systemctl 会很混乱:它是正确的 D-Bus 库吗?里面的systemctl版本和外面的daemon版本一样吗?
如果您只想使用 chroot 内的服务,您有两个选择:
- 使用新的便携式服务,随 systemd 239 引入。如果您希望内部的服务可以从外部访问,那么这就是您想要的。
- 确保 chroot 内存在 systemd,并用于
systemd-nspawn --boot
在 chroot 内运行单独的 systemd 实例。然后,就可以启用它,并且只在内部生效。