为什么ubuntu镜像的nspawn失败?

为什么ubuntu镜像的nspawn失败?

我想要systemd-nspawn一个 Ubuntu 镜像(yakkety,主机也在 yakkety 上)。这曾经工作得没有问题,所以我猜想在过去的 6 个月里发生了一些变化。

我通过以下方式创建了图像debootstrap

# debootstrap --variant=minbase --include=nano,dbus,isc-dhcp-client,iputils-ping,iproute2,python3 yakkety yakkety http://fr.archive.ubuntu.com/ubuntu

然后我尝试启动它:

# machinectl start yakkety

没有错误消息,但容器未启动。journalctl -xe暴露了错误:

Feb 27 13:24:27 srv systemd-nspawn[27348]: execv(/usr/lib/systemd/systemd, /lib/systemd/systemd, /sbin/init) failed: No such file or directory

好像没有什么可以初始化的?通过创建的图像怎么可能做到这一点debootstrap?否则图像看起来正常(它包含常见的文件夹和二进制文件 - 除了上面的文件夹和二进制文件,因为它们不存在而无法启动)

直接调用会systemd-nspawn产生相同的错误:

# systemd-nspawn -b -D yakkety -n
Spawning container yakkety on /var/lib/machines/yakkety.
Press ^] three times within 1s to kill container.
execv(/usr/lib/systemd/systemd, /lib/systemd/systemd, /sbin/init) failed: No such file or directory
Container yakkety failed with error code 1.

systemd我尝试通过将和init软件包添加到要预安装的软件包的 luist 中来重新创建图像(python3在上面的示例中之后),但这并没有改变任何内容。

问题是什么?我需要安装额外的软件包吗? (我之前没有安装任何特殊的东西xenial,如果我没有记错的话,也没有安装任何特殊的东西yakkety)。

所有软件包都是最新版本,包括systemd(233)。

答案1

您需要在容器内安装 init 系统,例如 systemd:

chroot /var/lib/machines/yakkety
apt-get install systemd

我在 Debian 上遇到了同样的问题,这解决了问题。

相关内容