我正在尝试启动 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容器应用相同的逻辑(运行一个阻塞命令,直到达到运行级别),但我无法直接告诉您哪些命令可以做到这一点。
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |