Vagrant和Docker玩得不好

时间:2015-08-19 02:02:22

标签: macos docker vagrant

更新:我已经卸载了Vagrant和Docker,并且会接受任何可以帮助我以下列方式重新安装它们的答案:

  1. 我可以在不依赖Docker的情况下运行Vagrant;和
  2. 我可以在不依赖Vagrant的情况下运行Docker;和
  3. 我可以运行Vagrant并使用Docker作为支持提供商
  4. 如果您查看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作为输出。

    任何想法出了什么问题以及解决方法是什么?

4 个答案:

答案 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)

我有这个工作,但不知道实际的解决方案是什么。

  1. 卸载Vagrant和Docker
  2. 手动重新安装Vagrant(不是通过brew/cask
  3. this link
  4. 重新安装Docker
  5. 使用this 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的可执行文件的所有已知位置。在某个地方可能会有一个杂散的二进制文件,它优先于真正的二进制文件。