启动多个 Vagrant box 并通过 SSH 连接到它们

Spin up multiple Vagrant boxes and SSH into them

我有 3 个 vagrant boxes

vagrant box list

hashicorp/precise32 (virtualbox, 1.0.0)
hashicorp/precise64 (vmware_fusion, 1.1.0)
laravel/homestead   (virtualbox, 0.4.2)

当我执行 vagrant upvagrant ssh 时,我一直登录到 hashicorp/precise32 机器。

如何同时旋转这 3 个框?

如何通过 SSH 连接到它们中的每一个?

首先,您必须为三个项目文件夹中的每个框创建 Vagrant 环境:

vagrant init hashicorp/precise32
vagrant init hashicorp/previse64
vagrant init laravel/homestead

现在您可以在项目文件夹中使用 vagrant upvagrant ssh。命令 vagrant global-status 显示你机器的状态。

流浪起来

将启动您在 Vagrantfile.

中列出的所有 vagrant boxes

然后,简单地 ssh 放入它们 - 一个接一个。

您可以将所有三台机器都包含在同一个 vagrantfile 中,并在目录中执行一个 vagrant up 操作,这将调出所有机器。这是一个 virtualbox 示例,您可能需要编辑它并添加一个 vmware 提供程序块以添加您的 laravel 机器。

# -*- mode: ruby -*-

# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = '2'

# declare the machine config in a hash
HOST_CONFIG = { 
  'ubuntu_32' => 'hashicorp/precise32',
  'ubuntu_64' => 'hashicorp/previse64',
  'laravel' => 'laravel/homestead'
}

# create the vms
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  HOST_CONFIG.each do |hostname, basebox|
    config.vm.define hostname do |hname|
      hname.vm.box = basebox
      hname.vm.provider 'virtualbox' do |v|
        v.name = hostname
      end
    end
  end
end

机器启动后,在同一目录中,您可以使用散列中提供的框名称通过 ssh 进入每个框。

示例:

vagrant ssh ubuntu_32

会带你进入hashicorp/precise32框。

vagrantfile 中允许您使用名称的重要部分是

config.vm.define hostname do |hname|

下面的块将名称附加到 virtualbox 中的机器

 hname.vm.provider 'virtualbox' do |v|
    v.name = hostname
 end

这会将给定的名称分配给连接的机器 (vm)。要让 vmware 机器获得名称,您可能必须将其包装在 if-else

if hostname == 'ubuntu_64'
  hname.vm.provider 'vmware_fusion' do |v|
    v.name = hostname
  end
else
  hname.vm.provider 'virtualbox' do |v|
    v.name = hostname
  end
end