由于 ubuntu 上的标准 DHCP "vboxnet0",Vagrant with Virtualbox 无法启动

Vagrant with Virtualbox does not start because of standard DHCP "vboxnet0" on ubuntu

vagrant up 上,vagrant 显示以以下内容开头的错误:

A host only network interface you're attempting to configure via DHCP already has a conflicting host only adapter with DHCP enabled. [...]

这是自 2014 年以来的全新安装和一个已知问题。解决方法是每次在 vagrant up 之前手动执行 VBoxManage dhcpserver remove --netname HostInterfaceNetworking-vboxnet0

但这怎么能自动完成呢?

将以下代码放在 Vagrantfile 的开头将自动解决问题,并且仅在基于 os 的 linux 上执行:

Vagrant.configure("2") do |config|
      
      host = RbConfig::CONFIG['host_os']
      if host =~ /(linux)/
        config.trigger.before :up do |trigger|
            trigger.warn = "removing standard dhcp host interface if existent"
            trigger.run = {inline: "bash -c 'if [ $( VBoxManage list dhcpservers | grep -c vboxnet0 ) != \"0\" ]; then VBoxManage dhcpserver remove --netname HostInterfaceNetworking-vboxnet0; fi'"}
          end
      end

# [...] your other code here ---

end

该代码首先检查是否有名称包含字符串 vboxnet0 的 dhcp 服务器,否则 VBoxManage 将以错误结束,如果标准 dhcp 不存在则阻止您启动虚拟机存在(有时会发生)。