用puPHPet设置的Vagrant似乎忽略了我的forwarded_port设置

时间:2015-03-20 08:56:49

标签: vagrant yaml virtualbox vagrantfile puphpet

我想要做的是同时运行2个或更多的流浪盒。现在我遇到的问题是我收到警告"转发到2222的端口已经在使用中 在主机"。这是奇怪的,因为我没有在puPHPet设置期间将任何Vagrant盒子设置为2222端口。

以下是我的2个config.yaml文件中的相关部分:

vagrantfile-local:
    vm:
        box: puphpet/ubuntu1404-x64
        box_url: puphpet/ubuntu1404-x64
        hostname: ''
        memory: '1024'
        cpus: '1'
        chosen_provider: virtualbox
        network:
            private_network: 192.168.56.101
            forwarded_port:
                dL5if56LAPQo:
                    host: '6645'
                    guest: '22'

---
vagrantfile-local:
    vm:
        box: puphpet/ubuntu1404-x64
        box_url: puphpet/ubuntu1404-x64
        hostname: ''
        memory: '1024'
        cpus: '1'
        chosen_provider: virtualbox
        network:
            private_network: 192.168.56.102
            forwarded_port:
                dL5if56LAPQo:
                    host: '6646'
                    guest: '22'

我猜测它是我的错,但我没有看到任何地方分配的端口2222(可能是它的默认设置)。

1 个答案:

答案 0 :(得分:0)

这有点像作弊,并没有解决核心问题,但它对我来说已经足够了。我为解决问题所做的是更改puPHPet生成的Vagrant文​​件。我将转发的端口行更改为:

data['vm']['network']['forwarded_port'].each do |i, port|
    if port['guest'] != '' && port['host'] != ''
      config.vm.network :forwarded_port, guest: port['guest'].to_i, host: port['host'].to_i, auto_correct: true
    end
  end

我添加了“,auto_correct:true”。这就是Vagrant文​​档中关于auto_correct的说法:


端口冲突和纠正

在运行多个Vagrant计算机时,通常会在不知不觉中创建相互冲突的转发端口定义(例如,两个单独的Vagrant项目转发到端口8080)。 Vagrant包含内置机制来自动检测并纠正它。

始终进行端口碰撞检测。 Vagrant不允许您定义转发端口,主机上的端口似乎接受流量或连接。

必须为每个转发端口手动启用端口冲突自动更正,因为它发生时通常会令人惊讶,并且可能导致Vagrant用户认为端口未正确转发。启用自动更正非常简单:

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080,
    auto_correct: true
end

最终:auto_correct参数设置为true告诉Vagrant自动更正任何冲突。在流浪汉或流浪汉重新加载期间,Vagrant将输出有关任何碰撞检测和自动更正的信息,因此您可以注意并采取相应行动。


我无法更好地解释它:)