Vagrant执行vagrant up超时 仅打开VirtualBox日志窗口可正常启动
故障原因解析
- 核心诱因是VirtualBox 无头启动模式下的串口输出缓冲阻塞:默认
vagrant up调用VirtualBox启动虚拟机时会使用无GUI的无头模式,若虚拟机默认开启了串口输出功能,且VirtualBox未给该串口绑定输出目标,串口产生的运行日志会持续堆积在缓冲区,缓冲区占满后会直接阻塞虚拟机的启动流程,导致Vagrant等待虚拟机SSH连通时触发超时,即便调大超时阈值也无法解决。 - 打开VirtualBox对应虚拟机的「显示日志」窗口时,相当于自动为虚拟机串口绑定了实时输出目标,缓冲日志可以正常排出不再阻塞启动,因此此时执行
vagrant up就可以正常完成启动。
永久修复方案
你可以选择以下任意一种方案解决该问题:
- 方案1:直接关闭虚拟机串口功能,在Vagrantfile中添加如下配置即可:
config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--uart1", "off"] end
- 方案2:为串口指定固定日志输出文件,避免缓冲阻塞,配置参考:
config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--uart1", "0x3F8", "4"] vb.customize ["modifyvm", :id, "--uartmode1", "file", "./vbox_serial.log"] end
- 方案3:默认带GUI启动虚拟机,避开无头模式的阻塞问题,配置参考:
config.vm.provider "virtualbox" do |vb| vb.gui = true end
内容的提问来源于stack exchange,提问作者Yakult
相关产品推荐
相关产品推荐

