更新:我已经卸载了Vagrant和Docker,并且会接受任何可以帮助我以下列方式重新安装它们的答案:
如果您查看Vagrant源代码,您会发现我的错误来自this line of code,对于VirtualBox提供商来说,它来自this usable
method引发错误。如果usable
方法认为VirtualBox的版本无效(VirtualBoxInvalidVersion
)或者在本地系统(VirtualBoxNotDetected
上未检测到它),则会引发错误。
不是Ruby开发者,现在我很难弄清楚Vagrant如何决定抛出这两个错误中的任何一个。但我想我已经越来越清楚地知道为什么Docker正在使用我的Vagrant / VirtualBox配置。
原始问题:
Mac在这里。几天前我安装了Vagrant和VirtualBox,如下所示:
brew cask install virtualbox
brew cask install vagrant
brew cask install vagrant-manager
......这让Vagrant起来并没有任何问题。我能够vagrant init hashicorp/precise32; vagrant up
,一切看起来都运行完美(hashicorp/precise32
默认使用VirtualBox。)
然后昨晚我安装了Docker,这也需要VirtualBox,并且运行起来没有任何问题。我甚至能够让whalesay
容器示例正常工作。到目前为止一切都很好。
今天我去Vagrant玩游戏,看起来我的Docker安装了我的Vagrant / VirtualBox配置。
现在,当我在空目录上运行vagrant init hashicorp/precise32
,然后运行vagrant up
时,我得到:
myuser@mymac:~/sandbox/myapp$vagrant up
No usable default provider could be found for your system.
Vagrant relies on interactions with 3rd party systems, known as
"providers", to provide Vagrant with resources to run development
environments. Examples are VirtualBox, VMware, Hyper-V.
The easiest solution to this message is to install VirtualBox, which
is available for free on all major platforms.
If you believe you already have a provider available, make sure it
is properly installed and configured. You can see more details about
why a particular provider isn't working by forcing usage with
`vagrant up --provider=PROVIDER`, which should give you a more specific
error message for that particular provider.
然后我尝试指定提供者类型,即使我不应该,只是为了看看会发生什么:
myuser@mymac:~/sandbox/myapp$vagrant up --provider=VirtualBox
The provider 'VirtualBox' could not be found, but was requested to
back the machine 'cortex'. Please use a provider that exists.
只是为了好的衡量标准,运行vagrant -v
会产生Vagrant 1.7.2
作为输出。
任何想法出了什么问题以及解决方法是什么?
答案 0 :(得分:2)
Vagrant关心案例(至少是Vagrant 1.8.1),所以请使用小写字母作为提供者名称:
vagrant up --provider=virtualbox
我认为1.8.1错误消息更有帮助:
$ vagrant up --provider=VirtualBox # NOTE: this is the WRONG capitalization
An active machine was found with a different provider. Vagrant
currently allows each machine to be brought up with only a single
provider at a time. A future version will remove this limitation.
Until then, please destroy the existing machine to up with a new
provider.
Machine name: default
Active provider: virtualbox
Requested provider: VirtualBox
您也可以在Vagrantfile中设置默认提供程序。
答案 1 :(得分:1)
我遇到了同样的问题,并通过将Vagrant更新到最新版本(1.7.2,更新为1.8.1)来修复它。
答案 2 :(得分:0)
我有这个工作,但不知道实际的解决方案是什么。
brew/cask
)Vagrantfile
to confirm您的Vagrant-Docker-VirtualBox可以很好地协同工作答案 3 :(得分:0)
我无法重现这个问题。但是,我从Vagrant的VirtualBox提供程序中读到了一些源代码。听起来好像在VBoxManage
中找不到$PATH
。即使通过Homebrew安装,它也应该位于/usr/bin/VBoxManage
。有可能你的$ PATH变量不正确,或者VBoxManage在其他地方。
其他有相同问题的读者应该:
/etc/paths
以确保列出/usr/bin
以及$ PATH中常见的所有其他目录。~/.bashrc
或~/.bash_profile
的文件。默认情况下,Mac OS X不附带任何一个文件,但有些用户将它们添加到自定义bash,某些程序可能会尝试自动编辑/创建它们。警惕任何看起来像export PATH=...
的行。在OS X上,应该在/etc/paths
和/etc/paths.d/*
中更改$ PATH,而不是在bash脚本中。type -a VBoxManage
以查看名为VBoxManage
的可执行文件的所有已知位置。在某个地方可能会有一个杂散的二进制文件,它优先于真正的二进制文件。