如何检测LXC容器系统是否准备就绪?

anu*_*umi 5 boot lxc

我正在尝试启动 LXC 容器,然后在其中运行命令。问题在于,即使容器处于 RUNNING 状态,它也没有完成所有的启动。这会给 /tmp 带来麻烦(我猜,还有其他初始化)。

这可以通过创建容器、启动容器、等待其 RUNNING 状态并执行一些命令的调用序列来说明;这些命令创建一个文件 /tmp/hello,显示一个目录,稍等一下,然后再次显示该目录:

lxc-clone -B overlayfs -s -o vm -n c1 ; lxc-start -n c1 ; lxc-wait -n c1 -s RUNNING ; lxc-attach -n c1 -- su -c "touch /tmp/hello; ls -la /tmp; sleep 5; ls -la /tmp" slave ; lxc-stop -n c1 ; lxc-destroy -n c1

其输出是

Created container c1 as snapshot of vm total 16 drwxrwxrwt 1 root root 4096 May 24 09:37 . drwxr-xr-x 1 root nogroup 4096 May 24 09:37 .. drwxrwxrwt 2 root root 4096 May 22 21:19 .ICE-unix drwxrwxrwt 2 root root 4096 May 22 21:19 .X11-unix -rw-rw-r-- 1 slave slave 0 May 24 09:37 hello total 16 drwxrwxrwt 1 root root 4096 May 24 09:37 . drwxr-xr-x 1 root nogroup 4096 May 24 09:37 .. drwxrwxrwt 2 root root 4096 May 24 09:37 .ICE-unix drwxrwxrwt 2 root root 4096 May 24 09:37 .X11-unix

并显示文件 /tmp/hello 被某些初始化脚本删除。

如何在容器内等待系统完全启动?另外,如何从容器外部执行此操作?

小智 4

对于在 systemd 上运行的容器,这似乎效果很好:

lxc-attach -n [CONTAINER NAME] -- systemctl isolate multi-user.target
Run Code Online (Sandbox Code Playgroud)

您可能可以对基于sysvinit或 的upstart容器应用相同的逻辑(运行一个阻塞命令,直到达到运行级别),但我无法直接告诉您哪些命令可以做到这一点。