如何在 `vagrant up` 命令期间指定提供者?

How to specify a provider during `vagrant up` command?

我有两个 machines (linux, Mac) 并且需要使用 vagrant 来管理虚拟机。 VirtualBox 在 Liux 中使用,而 parallels 在 Mac 中使用。所以我在 vagrant 配置文件中配置了这两个提供程序,如下所示:

Vagrant.configure('2') do |config|
    config.ssh.forward_agent = true
    config.ssh.password = 'crunch'

    config.vm.box = 'ubuntu/xenial64'

    config.vm.provider 'virtualbox' do |vb|
        vb.gui = true
        vb.memory = '8192'
        vb.name = 'ubuntu'
    end

    config.vm.provider 'parallels' do |vb|
        vb.gui = true
        vb.memory = '8192'
        vb.name = 'ubuntu'
        config.vm.box = 'parallels/ubuntu-14.04'
    end

在我的 mac 系统上,当我 运行 执行以下命令但出现错误时:

$ vagrant up --provider parallels
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: parallels

我已经安装了所需的提供程序:

$ vagrant plugin list
docker (0.4.0)
vagrant-parallels (1.7.8)
vagrant-share (1.1.9, system)
vagrant-vbguest (0.15.0)

那么为什么 vagrant 不选择 --provider 参数?

这是一个current limitation的流浪汉

you cannot back the same machine with both VirtualBox and VMware Fusion. This is a limitation that will be removed in a future version of Vagrant.

我不确定它是否会被 vagrant 解决。但是你已经用 virtualbox 创建了一次你的机器,所以现在你应该使用这个 VM,而不是另一台机器。

解决此问题的一种方法是使用 (.vagrant.vbox) 等现有 VM 的引用备份 .vagrant 文件夹,然后重新 运行 vagrant up --provider parallels 让它创建了平行虚拟机。

如果你想切换回virtualbox VM,你可以备份新创建的.vagrant文件夹并将.vagrant.vbox重命名为.vagrant

简答

删除项目中的 .vagrant 文件夹。

rm -r .vagrant

(我留下这个重复的答案是因为我个人懒得看上一个而错过了解决方案)