lxc:在容器内运行 virtualbox

use*_*168 10 permissions virtualbox lxc

我已经在lxc容器内安装了 VirtualBox 。但是,当我尝试启动 VM 时,我收到以下消息:

kernel driver not accessible (rc=1909)
....permission problem with /dev/vboxdrv.
Run Code Online (Sandbox Code Playgroud)

这显然看起来像是一个可预测的安全问题。

有谁知道我如何授予容器访问此设备驱动程序的权限:/dev/vboxdrv

非常感谢任何帮助或指示。

rco*_*oup 9

在您的 LXC 主机上(我在这里假设是 Ubuntu):

  1. 安装virtualbox-dkms, linux-headers-generic,build-essential包并检查内核模块是否已加载:

    myhost$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 获取 VirtualBox 设备编号(在我的情况下为 10、55/56/57):

    myhost$ ls -la /dev | grep vbox
    crw-------  1 root root     10,  57 Feb 25 08:22 vboxdrv
    crw-------  1 root root     10,  56 Feb 25 08:22 vboxdrvu
    crw-------  1 root root     10,  55 Feb 25 08:22 vboxnetctl
    
    Run Code Online (Sandbox Code Playgroud)
  3. 获取节点编号并添加到您的 LXC 来宾配置 ( /var/lib/lxc/myguest/config):

    ## VirtualBox
    lxc.cgroup.devices.allow = c 10:57 rwm
    lxc.cgroup.devices.allow = c 10:56 rwm
    lxc.cgroup.devices.allow = c 10:55 rwm
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重启你的 LXC 来宾,安装virtualbox包,并创建设备节点:

    myguest$ sudo mknod -m 600 /dev/vboxdrv c 10 57
    myguest$ sudo mknod -m 600 /dev/vboxdrvu c 10 56
    myguest$ sudo mknod -m 600 /dev/vboxnetctl c 10 55
    
    Run Code Online (Sandbox Code Playgroud)
  5. 检查来宾上的 VirtualBox 是否可以看到内核模块:

    myguest$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
    Run Code Online (Sandbox Code Playgroud)


小智 1

VirtualBox Linux 内核驱动程序 (vboxdrv) 未加载或 /dev/vboxdrv 存在权限问题。通过执行重新设置内核模块

 '/etc/init.d/vboxdrv setup'
Run Code Online (Sandbox Code Playgroud)

作为根。Ubuntu 或 Fedora 用户应首先安装 DKMS 软件包。该软件包跟踪 Linux 内核更改并在必要时重新编译 vboxdrv 内核模块。