Vagrant在启动多台计算机时运行错误的配置文件

Vagrant在启动多台计算机时运行错误的配置文件,vagrant,vagrantfile,vagrant-windows,Vagrant,Vagrantfile,Vagrant Windows,我有以下文件,其中指定了两台机器-前端和后端框 Vagrant.configure(2) do |config| config.vm.box = "frontend" config.vm.network "private_network", ip: "192.168.0.5" config.vm.provider "virtualbox" do |vb| vb.gui = true vb.memory = "4096" end config.vm.comm

我有以下文件,其中指定了两台机器-前端和后端框

Vagrant.configure(2) do |config|
  config.vm.box = "frontend"
  config.vm.network "private_network", ip: "192.168.0.5"  
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.memory = "4096"
  end
  config.vm.communicator = "winrm"
  config.vm.provision "shell", path: "Provision.ps1"
  config.vm.define "db" do |db|
    db.vm.box = "backend"
    db.vm.network "private_network", ip: "192.168.0.10"  
    db.vm.provider "virtualbox" do |vb|
        vb.gui = true
        vb.memory = "4096"
    end
    db.vm.communicator = "winrm"
    db.vm.provision "shell", path: "ProvisionRemote.ps1"
  end
end
当我输入vagrant up时,根据多机文档,它应该首先引导前端箱并运行Provision.ps1,然后引导后端箱并在其上运行ProvisionRemote.ps1(由外向内)

但是,发生的情况是,后端箱首先引导,然后它尝试在其上运行Provision.ps1(用于前端箱)


为什么要这样做?我做错了什么?

这种方法以正确的顺序触发供应器

config.vm.provision "docker" do |d|
  # installs docker
end

config.vm.provision :shell do |sh|
  sh.privileged = false
  sh.inline = $provision
end

config.vm.provision :shell do |sh|
  sh.privileged = false
  sh.path = "generateWebserverInstallEnvironment.sh"
end

您应该突出显示您有两台机器

Vagrant.configure(2) do |config|

  config.vm.communicator = "winrm"

  config.vm.define "front" do |front|
    front.vm.box = "frontend"
    front.vm.network "private_network", ip: "192.168.0.5"  
    front.vm.provider "virtualbox" do |vb|
      vb.gui = true
      vb.memory = "4096"
    end
    front.vm.provision "shell", path: "Provision.ps1"
  end  

  config.vm.define "db" do |db|
    db.vm.box = "backend"
    db.vm.network "private_network", ip: "192.168.0.10"  
    db.vm.provider "virtualbox" do |vb|
        vb.gui = true
        vb.memory = "4096"
    end
    db.vm.provision "shell", path: "ProvisionRemote.ps1"
  end
end
这里您只定义了一台机器(配置,您确实覆盖了后端块中定义的一些参数,但这实际上是同一台机器定义),因此vagrant正在引导您定义的一台机器,并尝试运行所有provisioner

以下内容用于定义两台机器

Vagrant.configure(2) do |config|

  config.vm.communicator = "winrm"

  config.vm.define "front" do |front|
    front.vm.box = "frontend"
    front.vm.network "private_network", ip: "192.168.0.5"  
    front.vm.provider "virtualbox" do |vb|
      vb.gui = true
      vb.memory = "4096"
    end
    front.vm.provision "shell", path: "Provision.ps1"
  end  

  config.vm.define "db" do |db|
    db.vm.box = "backend"
    db.vm.network "private_network", ip: "192.168.0.10"  
    db.vm.provider "virtualbox" do |vb|
        vb.gui = true
        vb.memory = "4096"
    end
    db.vm.provision "shell", path: "ProvisionRemote.ps1"
  end
end

config*参数适用于这两台机器(如
config.vm.communicator
),因此所有常用参数都应应用于
config.
变量(注意:我没有尝试将虚拟盒提供程序置于config下,但只要它是相同的,它就应该工作),如果您需要特定于机器的参数,则必须在特定块中定义(如定义为
front.vm.network“private\u network”的IP:“192.168.0.5”

非常感谢您。您的解释比文档更明确、更容易理解。