无法自动启动使用 LXD 创建的 LXC 容器

无法自动启动使用 LXD 创建的 LXC 容器

我已经使用 LXD 工具轻松创建了一个 lxc 容器,但是我找不到在重启时自动启动它的方法。(Ubuntu 15.04)

对于 LXC,据说添加lxc.start.auto = 1到容器配置就足够了,但是我找不到使用 LXD 创建的容器的配置文件。我试过了

lxc config set my_machine raw.lxc "lxc.start.auto=1"

没有任何运气。配置已保存,但容器未启动...有什么想法吗?

答案1

几个月过去了,lxd 本身已经支持自动启动(已经有一段时间了)。你可以

lxc init ubuntu u1
lxc config set u1 boot.autostart true

现在 u1 将在每次重启时自动启动。

答案2

根据官方文档这里LXC 容器启动是使用 upstart 设计的。自 2015 年 3 月 9 日起,Ubuntu 15.04 默认改为使用 systemd。有关此更改的影响以及如何从 systemd 切换到 upstart 并重新切换回的详细信息,请参阅这一页。

要检查你的系统使用的是 systemd 还是 upstart,你可以通过发出命令来测试,sudo initctl version如果 upstart 正在处理 init,该命令将返回 upstart。另一个有用的方法是发出命令,dpkg -S /sbin/init它会告诉你哪个包安装了它(在我的情况下,在 14.04 上是 upstart),你可以从我们的朋友那里找到更多关于如何做到这一点的非常好的答案Unix 和 Linux。关于识别 init 系统也可用。

要查看你的 LXC 容器是否按照设计在 upstart 下自动启动,你可以安装upstart-sysv软件包,这将删除 ubuntu-standard 和 systemd-sysv(但不应删除任何其他内容。如果删除,请通知开发人员!),然后运行 ​​sudo update-initramfs -u。之后,grub 的“高级选项”菜单将有一个相应的“Ubuntu,带有 Linux ... (systemd)”条目,您可以在其中使用 systemd 进行一次性启动。

您可以恢复到 systemd 安装systemd-sysvUbuntu 标准包。

更多来源(未链接到其他地方):

https://unix.stackexchange.com/questions/196166/how-to-find-out-if-a-system-uses-sysv-upstart-or-systemd-initsystem

答案3

我问过 lxc/lxd 开发人员,似乎如果使用 lxd 创建容器,则无法通过配置来实现这一点。它尚未实现,但他们说计划这样做...

lxd 与 lxc 脚本略有不同:即,容器的默认目录是/var/lib/lxd/lxc//var/lib/lxc/并且容器配置保存在中央 sqlite db 中,而不是每个容器的某些配置文件中。

因此我必须通过创建文件来创建一个 systemd 作业:/etc/systemd/system/multi-user.target.wants/lxd-autostart.service文件内容如下:

[Unit]
Description=Start lxc containers created with lxd
After=lxd.service
Requires=lxd.service

[Service]
ExecStartPre=/usr/local/bin/lxd-autostart-check.sh
ExecStart=/usr/bin/lxc start my_machine
Restart=on-failure

[Install]
WantedBy=multi-user.target

并且/usr/local/bin/lxd-autostart-check.sh是:

#!/bin/bash

for i in {1..10}
do
    echo "."
    [ -S /var/lib/lxd/unix.socket ] && exit 0
    sleep 1
done

echo "/var/lib/lxd/unix.socket not detected!"
exit 1

相关内容