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”
)非常感谢您。您的解释比文档更明确、更容易理解。