You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform在VirtualBox创建Ubuntu虚拟机报错求助

问题:Terraform创建VirtualBox Ubuntu虚拟机失败,OS显示为Other/Unknown

我尝试用Terraform在Oracle VM VirtualBox中创建2台Ubuntu虚拟机,对应的main.tf配置如下:

terraform {
  required_providers {
    virtualbox = {
      source = "shekeriev/virtualbox"
      version = "0.0.4"
    }
  }
}
resource "virtualbox_vm" "vm1" {
   count     = 2
  name      = format("node-%02d", count.index + 1)
  image     = "https://app.vagrantup.com/ubuntu/boxes/bionic64/versions/20180903.0.0/providers/virtualbox.box"
  cpus      = 2
  memory    = "512 mib"
  
#   user_data = file("${path.module}/user_data")

  network_adapter {
    type           = "bridge"
    # device         = "IntelPro1000MTDesktop"
    # host_interface = "vboxnet1"
    # On Windows use this instead
    host_interface = "VirtualBox Host-Only Ethernet Adapter"
  }
  
output "IPAddress" {
  value = element(virtualbox_vm.vm1.*.network_adapter.0.ipv4_address, 1)
}

执行terraform apply时持续报错,错误信息如下:

│ Error: can't set up VM properties: exit status 1
│
│   with virtualbox_vm.vm1[0],
│   on main.tf line 15, in resource "virtualbox_vm" "vm1":
│   15: resource "virtualbox_vm" "vm1" {
│
╵
╷
│ Error: can't set up VM properties: exit status 1
│
│   with virtualbox_vm.vm1[1],
│   on main.tf line 15, in resource "virtualbox_vm" "vm1":
│   15: resource "virtualbox_vm" "vm1" {
│
╵
2023-02-07T17:06:10.579+0100 [TRACE] statemgr.Filesystem: removing lock metadata file .terraform.tfstate.lock.info
2023-02-07T17:06:10.580+0100 [TRACE] statemgr.Filesystem: unlocked by closing terraform.tfstate     
2023-02-07T17:06:10.581+0100 [DEBUG] provider.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = error reading from server: EOF"
2023-02-07T17:06:10.591+0100 [DEBUG] provider: plugin process exited: path=.terraform/providers/registry.terraform.io/shekeriev/virtualbox/0.0.4/windows_amd64/terraform-provider-virtualbox.exe pid=28956
2023-02-07T17:06:10.591+0100 [DEBUG] provider: plugin exited

同时VirtualBox管理器中显示这些虚拟机的操作系统为Other/Unknown。


解决方案

  • 显式指定操作系统类型
    shekeriev的virtualbox provider不会自动识别Vagrant镜像的OS类型,必须在virtualbox_vm资源块中添加os_type_id字段,Ubuntu 18.04(bionic64)对应的类型为Ubuntu_64:

    resource "virtualbox_vm" "vm1" {
      # 其他配置...
      os_type_id = "Ubuntu_64"
      # 其他配置...
    }
    
  • 修正网络适配器配置冲突
    你当前的配置同时设置了type = "bridge"和host_interface = "VirtualBox Host-Only Ethernet Adapter",这两种模式不兼容,二选一调整:

    • 若使用桥接模式:删除host_interface配置,让VirtualBox自动选择物理网卡
      network_adapter {
        type = "bridge"
      }
      
    • 若使用Host-Only模式:将type改为hostonly
      network_adapter {
        type           = "hostonly"
        host_interface = "VirtualBox Host-Only Ethernet Adapter"
      }
      
  • 升级VirtualBox Provider版本
    0.0.4版本属于早期版本,存在较多兼容性问题,建议升级到最新稳定版,修改terraform块中的版本约束:

    terraform {
      required_providers {
        virtualbox = {
          source  = "shekeriev/virtualbox"
          version = "~> 0.2.0" # 可根据实际兼容情况调整为最新版
        }
      }
    }
    

    修改后执行terraform init -upgrade完成版本升级。

  • 清理残留资源后重新部署

    1. 打开VirtualBox管理器,手动删除已创建的错误虚拟机
    2. 执行terraform destroy清理Terraform状态文件
    3. 重新执行terraform init && terraform apply

内容的提问来源于stack exchange,提问作者Abdulsalam Al Mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:45:59