VirtualBox 更新后
vagrant up
在 Ubuntu 上失败并出现以下错误:
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
使用过的版本:
从 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
浏览有关仅主机网络的 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
我通过降级到 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
上面的最后一个命令不会删除虚拟机数据。
我需要我的 Vagrantfile 在多台机器(Ubuntu 和 Mac)上开箱即用,因此修改
/etc/vbox/networks.conf
对我来说不起作用。
相反,我将所有 Vagranfile IP 地址更改为 192.168.56.0/21,如 Paul Parker 和 重复问题的答案所述。
我最初根据 ChrisR 的回答和 VirtualBox 文档首先尝试了 192.68.56.0/21,该文档在 Linux 上运行。但 Mac 上的 VirtualBox 只接受其他范围(168 而不是 68)。
要允许所有类型的网络,请创建文件:/etc/vbox/networks.conf,其中内容:
* 0.0.0.0/0 ::/0
将用户添加到vbox用户:
usermod -aG vboxusers your_user
注销并重新登录并再次检查