Vagrant在使用VirtualBox提供程序时,启动失败,主机上出现E_ACCESSDENIED错误。

20
在Ubuntu系统上,当VirtualBox更新后,使用vagrant up 命令时出现以下错误:
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "ipconfig", "vboxnet2", "--ip", "10.160.0.1", "--netmask", "255.255.255.0"]

Stderr: VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available)
VBoxManage: error: Context: "EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp

使用的版本:

  • Vagrant 2.2.14
  • virtualbox-6.1 6.1.28-147628~Ubuntu~eoan
  • Ubuntu 20.04.3 LTS

1
同样的事情在 macOS 上也会发生。 - dodgy_coder
4个回答

38

自VirtualBox 6.1.28版本开始,默认情况下,仅允许使用位于192.168.56.0/21范围内的IP地址(192.168.56.1 -> 192.168.63.254)作为主机网络适配器。

您可以通过配置/etc/vbox/networks.conf文件来告知VirtualBox允许其他IP地址段。例如,要允许10.x.x.x范围内的任何地址,可以使用以下设置:

* 10.0.0.0/8

更多信息请查看文档:https://www.virtualbox.org/manual/ch06.html#network_hostonly


很棒的第一篇回答,Chris!干得好。对于那些不会在脑海中计算掩码的人来说,范围192.168.56.0/21映射到192.168.56.1 - 192.168.63.254。 - Paul Parker
4
非常感谢。我非常想知道在补丁版本中引入这个的原因。它破坏了我们所有的vagrant虚拟机。 - andsens
谢谢@PaulParker。我现在已经在答案中加入了扩展子网范围。 - ChrisR
1
@andsens很不幸,在提交记录中没有任何线索。相关的提交记录引用了bug#10077,但那一定是在某个私有的Oracle bug跟踪系统中,因为公共bug跟踪器中的bug#10077已经存在10年了,并且与这些更改无关。 - ChrisR
@ChrisR 很抱歉两年后才问,但你有相关提交的链接吗? - undefined

7
扫描VirtualBox主机网络文档后,您会发现对于Solaris、Linux和MacOS,主机网络允许使用的IP地址范围已经更改。VirtualBox现在只接受分配在192.168.56.0/21范围内的IP地址。以上错误表明Docker正在尝试创建并分配一个192.168.99.1/24地址和掩码。
现在有两个明显的解决方案,其中一个是改变Docker创建机器的方式,使其适应VirtualBox现在使用的“新”地址空间:
docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-hostonly-cidr 192.168.56.1/21 default

我们还可以从问题的另一方面来解决,即改变VirtualBox的行为。为此,我们需要在/etc/vbox中创建文件networks.conf:
sudo mkdir /etc/vbox
sudo nano /etc/vbox/networks.conf

在 networks.conf 文件中,我们可以告诉 VirtualBox 我们允许哪些网络:
* 10.0.0.0/8 192.168.0.0/16
* 2001::/64

4
我成功解决了这个错误,通过降级到VirtualBox 6.1.26版本:
# check the available versions
apt-cache showpkg virtualbox

# stop VirtualBox machines

# downgrade VirtualBox version
sudo apt-get install virtualbox=6.1.26-dfsg-3~ubuntu1.20.04.2

上面的最后一个命令不会删除虚拟机的数据。

1
可以确认在使用相同的VirtualBox版本(旧版和新版)和Ubuntu 20.04.2时出现了此问题和解决方案。我没有使用Vagrant,但是尝试通过GUI和VBoxManage更改主机专用适配器。 - Noah May

0

我需要我的Vagrantfile能够在多个机器上(Ubuntu和Mac)开箱即用,因此修改/etc/vbox/networks.conf对我无效。

相反,我将所有的Vagranfile IP地址都改成了192.168.56.0/21,就像Paul Parker一个重复问题的答案所描述的那样。

最初我尝试了192.68.56.0/21,参考了ChrisR的答案和VirtualBox文档,在Linux上可以工作。但是,在Mac上,VirtualBox仅接受另一个范围的IP地址(使用168而不是68)。


1
这实际上一直应该是192.168.56.0/21。当时我认为它看起来有点奇怪,可能是标准B类私有网络范围的打字错误。后来我检查了源代码并确认了这一点(文档也已更新)。 - ChrisR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接