我试图将我的Linux机器设置为运行多个来宾OS,其中一个是Windows VM,另一个是Linux容器。这里的目标是防止我弄乱主机系统,同时可以自由操作基本操作系统并使用主机硬件。最终,我希望在容器中运行我的桌面,然后希望运行图形加速的模拟等。由于Docker具有如此好的git内置容器版本,因此使用它似乎是一个好主意。也许libvirt与LXC一样好,但是docker的特权模式使不必为容器配置设备变得更加容易。

我已经做了一些研究,并已经提出了一些答案,但是我很难将所有内容放在一起。

LXC中的背景

从LXC运行X有助于我了解如何使用以下方式配置容器:

lxc.cgroup.devices.allow = c 226:0 rwm

和使用

mknod -m 666 dri/card0 c 226 0

在容器内部以连接到主机设备。

码头工人

从cuda中-使用来自docker容器的GPU,我看到我可以使用LXC后端在Docker中使用相同的设置。

在我看来,如果docker容器在特权模式下运行,那么它可以正常访问GPU,而无需进行额外配置。因此,我启动了一个基本系统,安装了图形驱动程序,xorg-server,xorg-xinit和一个窗口管理器进行测试。

第一次尝试

# startx

Cannot run from a console (or some message like that)

好的,我以为我在tty2上。

# tty

/dev/console

那不是我所期望的。

# chvt 2

# tty

/dev/tty2

好吧,看来好像可行。让我们再试# startx一次。它启动了窗口管理器,光标位于中间。无鼠标响应。无键盘响应。让我们尝试使用更改tty Ctrl-Alt+F3。没有反应。好吧,看来我将不得不重新启动。

第二次尝试

# tty

/dev/console

# chvt 2

# tty

/dev/console

什么?我现在不能更改吗?

继续

再次尝试后,我得到了它来更改tty,然后startx再次冻结了计算机。

现在怎么办?

所以,我现在陷入僵局。我真的希望能够使用一个容器(首选Docker,也可以使用带有libvirt的LXC)作为我的日常操作系统,同时保持精简的主机OS。

最好在这里以特权模式使用Docker,还是使用显式LXC后端并尝试上面列出的选项?

我已经在计划使用libvirt(可能在vagrant-libvirt下)来管理Windows vm,所以在这种情况下使用libvirt或vagrant-LXC对我来说会差不多吗?

编辑:阅读LXC与Docker的文章,我感到既然Docker和Docker容器是用于单应用程序环境的,那么最好使用LXC代替Docker作为我的日常操作系统运行。有什么想法吗?

编辑:我发现像docker一样,有一个lxc-device命令,它允许我绕过cgroups和mknod步骤。而在我能够启动x并冻结系统之前,它现在出错了。也许我最终可以弄清楚这一点,因为似乎没人在那里。

更新:我正在使用鼠标。在来宾上,我安装了xf86-input-mouse和xf86-input-keyboard。在主机上,我运行了以下命令:

# lxc-device -n g1 add /dev/input/mice

# lxc-device -n g1 add /dev/dri/card0

# lxc-device -n g1 add /dev/dri/controlD64

# lxc-device -n g1 add /dev/dri/renderD128

# lxc-device -n g1 add /dev/fb0

# lxc-device -n g1 add /dev/tty2

作品!