【问题标题】:Vagrant cannot forward the specified ports on this VMVagrant 无法转发此 VM 上的指定端口
【发布时间】:2014-07-30 10:34:13
【问题描述】:

我将 Vagrant 用于一个盒子配置文件。现在我想将 Vagrant 用于另一个盒子(b2),但它说 bioiq 的实例正在使用转发的端口 2222(它是)。

现在,如果我使用以下配置 b2,Vagrant 仍会尝试使用 2222。

Vagrant.configure("2") do |config|

  config.vm.box = 'precise32'
  config.vm.box_url = 'http://files.vagrantup.com/precise32.box'

  config.vm.network :forwarded_port, guest: 22, host: 2323

  # Neither of these fix my problem 
  # config.vm.network :private_network, type: :dhcp 
  # config.vm.network :private_network, ip: "10.0.0.200"
end

我尝试了其他 SO 问题中的各种方法来设置 :forwarded_port(请参阅 herehere)。我也试过这个Google Group post,但无济于事。我不断收到此消息。

Vagrant cannot forward the specified ports on this VM, since they
would collide with some other application that is already listening
on these ports. The forwarded port to 2222 is already in use
on the host machine.

To fix this, modify your current projects Vagrantfile to use another
port. Example, where '1234' would be replaced by a unique host port:

  config.vm.network :forwarded_port, guest: 22, host: 1234

Sometimes, Vagrant will attempt to auto-correct this for you. In this
case, Vagrant was unable to. This is usually because the guest machine
is in a state which doesn't allow modifying port forwarding.

我不知道为什么 Vagrant 总是无视我的指令。发布的配置不起作用。有没有人克服这个?

【问题讨论】:

    标签: networking virtual-machine vagrant


    【解决方案1】:

    如果是 ssh 端口,Vagrant 会自行解决端口冲突:

    ==> ubuntu64: Fixed port collision for 22 => 2222. Now on port 2200.
    

    但是,您仍然可以通过以下方式造成不可避免的碰撞:

    1. 创建第一个 vagrant env(它将为 ssh 获取端口 2222)
    2. 暂停该环境 (vagrant suspend)
    3. 创建第二个 vagrant env(它将再次获得端口 2222,因为它现在未被使用)
    4. 尝试通过vagrant up 再次启动第一个环境

    您将收到您现在收到的错误消息。

    解决方案是使用vagrant reload,让 vagrant 丢弃虚拟机状态(这意味着它将以硬方式关闭它 - 所以如果你有任何未保存的工作要小心)并重新启动环境,解决任何问题ssh 端口自行冲突。

    【讨论】:

    • 这行得通,但似乎不必像这样跳过箍来解决同时运行两个虚拟机环境的基本问题。我很困惑为什么原始错误消息建议的操作(更改 Vagrantfile 中的转发端口)不起作用。
    • VirtualBox 的错多于 Vagrant 的错。您无法在 VM 的生命周期内更改端口转发。所以当你暂停一个虚拟机时,它会释放套接字,但是当你恢复它并且那个套接字被占用时,你不能动态更改它,需要重新启动虚拟机。
    • 当我使用 vagrant reload 时,我得到了同样的错误信息。
    • 两台 vagrant 机器上的 vagrant reload 为我完成了这项工作!
    • 谢谢!我已将此信息添加到 vagrant 文档中!见github.com/mitchellh/vagrant/pull/7299/files
    【解决方案2】:

    我刚刚在当前版本的 Mac OSX (10.9.4) 和 VirtualBox (4.3.14) 上遇到了一个问题,其中默认 ssh 端口 2222 既未使用且未绑定 vagrant up。它导致完整性检查 ssh 连接无限期超时。

    这不是完全相同的问题,但明确的转发解决了它:

    config.vm.network :forwarded_port, guest: 22, host: 2201, id: "ssh", auto_correct: true
    

    此建议来自 Vagrant GitHub issue 1740 上的评论。

    不清楚是否检测到转发到 22 的端口或是否使用了 ID,但它对我有用。

    【讨论】:

    • 好酷。感谢您的信息。这绝对是一个很好的参考点。
    • 很好的答案,重新加载是一个简单的解决方案,但这甚至有助于暂停机器。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2017-11-22
    • 2016-01-13
    • 2022-11-04
    • 2014-07-13
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多