Как запустить несколько экземпляров Vagrant Box из одного файла с переадресацией портов - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь запустить 2 ящика из одного файла vagrant, используя al oop. Это работает, но пока я не попытаюсь добавить к нему переадресацию портов. Я никогда раньше не программировал, используя Ruby, и я не очень продвинут, используя vagrant, так что, вероятно, это что-то простое и очевидное, но я не могу понять, что это такое.

Вот упрощенный пример:

  {
    :hostname => "first",
    :ip => "192.168.100.10",
    :box => "minimal/xenial64",
    :ram => 1024,
    :cpu => 2,
    :port => 9080
  },
  {
    :hostname => "second",
    :ip => "192.168.100.11",
    :box => "minimal/xenial64",
    :ram => 2024,
    :cpu => 1,
    :port => 9081
  }
]

Vagrant.configure(2) do |config|
    machines.each do |machine|
        config.vm.define machine[:hostname] do |node|


            # This is working just fine, each machine gats it's own ip, port, ram, memory
            # as they specified in machines array above

            node.vm.box = machine[:box]
            node.vm.hostname = machine[:hostname]
            node.vm.network "private_network", ip: machine[:ip]
            node.vm.provider "virtualbox" do |vb|
                vb.customize ["modifyvm", :id, "--memory", machine[:ram]]
            end


            # But this is not working the same way for some reason,
            # firs machine gets both ports
            config.vm.network :forwarded_port, guest: 80, host: machine[:port]

            #==> first: Forwarding ports...
            #    first: 80 (guest) => 9080 (host) (adapter 1)
            #    first: 80 (guest) => 9081 (host) (adapter 1)

            # And than second machine obviously can start because of:
            # The forwarded port to 9080 is already in use on the host machine.
        end
    end
end

1 Ответ

0 голосов
/ 30 апреля 2020

Как я подозреваю, это было что-то простое и очевидное, я использовал

config.vm.network :forwarded_port, guest: 80, host: machine[:port]

, но вместо него следует использовать

node.vm.network :forwarded_port, guest: 80, host: machine[:port]

, поскольку node относится к текущему закрытию.

...