【问题标题】:How do I remove a forwarded port in Vagrant?如何删除 Vagrant 中的转发端口?
【发布时间】:2016-04-21 09:58:19
【问题描述】:

我下载了一个 Vagrantfile 并在我的 CentOS 7 机器上运行它。当我执行vagrant up 时,进程成功启动,机器已启动并准备就绪。我可以使用 URL 访问该过程:

http://<IP_ADDRESS_OF_BOX>:8080

但是,我不希望 Vagrant 使用端口 8080,而宁愿使用像 8601 这样的不起眼的端口。因此,我修改了 Vagrantfile 以包含 config.vm.network 的另一个条目。

更改前 - Vagrantfile

Vagrant.configure(2) do |config|
    config.vm.box = 'ToraToraTora'
end

更改后 - Vagrantfile

Vagrant.configure(2) do |config|
    config.vm.box = 'ToraToraTora'
    config.vm.network "forwarded_port", guest: 80, host: 8601
end

现在我可以使用新端口访问进程了:

http://<IP_ADDRESS_OF_BOX>:8601

但是,之前的端口也继续工作:

http://<IP_ADDRESS_OF_BOX>:8080

执行sudo netstat -tulpn:

[ToraToraTora@andromeda ~]$ sudo netstat -tulpn | grep 26206
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN      26206/VBoxHeadless  
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      26206/VBoxHeadless  
tcp        0      0 0.0.0.0:8601            0.0.0.0:*               LISTEN      26206/VBoxHeadless  
udp        0      0 0.0.0.0:40168           0.0.0.0:*                           26206/VBoxHeadless  
[ToraToraTora@andromeda ~]$

运行vagrant port的输出:

[ToraToraTora@andromeda app]$ vagrant port
The forwarded ports for the machine are listed below. Please note that
these values may differ from values configured in the Vagrantfile if the
provider supports automatic port collision detection and resolution.

    22 (guest) => 2222 (host)
    80 (guest) => 8080 (host)
    80 (guest) => 8601 (host)
[ToraToraTora@andromeda app]$ 

如何阻止 Vagrant 进程使用端口 8080 并且只使用端口 8601?

【问题讨论】:

  • 所以vagrant reload 没有清除旧的转发端口? vagrant port 命令的输出是什么? docs.vagrantup.com/v2/cli/port.html
  • 这很奇怪,因为 vagrant 似乎没有采用“端口”的参数。我安装了 Vagrant 1.7.4 版。
  • 对,该命令是在 1.8.0 中添加的。在我写这篇文章时,你应该安装最新的 1.8.1。
  • 用“vagrant port”的输出更新了问题

标签: vagrant port


【解决方案1】:

如果您能够使用http://&lt;IP_ADDRESS_OF_BOX&gt;,在我看来您正在使用带有静态 IP 的vagrant private network,在这种情况下,IP 上的所有端口都可以访问,您不一定需要forward_port 选项.

另外,当 netstat 使用您的选项运行它时,您可以使用 sudo netstat -tulpn 运行它,这样您就可以在后面找到 PID/程序名称

【讨论】:

  • 使用 sudo 运行 netstat 的结果编辑了问题。
  • 是的,一开始没有端口转发,我输入了转发到端口 8601 的条目。但是,问题仍然存在:如何阻止 Vagrant 进程使用端口 8080,并且只使用转发端口 8601。
  • 你能否打开虚拟机并检查此虚拟机的网络端口并尝试删除 8080 - 运行 vagrant reload 并确保此转发不会返回
  • 在 VirtualBox VM 文件夹中,我修改了 xxxxx.vbox 文件以删除“ 的条目”。但是,重新加载后,条目会再次创建。
【解决方案2】:

您可以明确禁用 8080 转发端口...

Vagrant.configure(2) do |config|
    config.vm.box = 'ToraToraTora'
    config.vm.network "forwarded_port", guest: 80, host: 8601
    config.vm.network "forwarded_port", guest: 80, host: 8080, disabled: true
end

如果您进行更改并执行vagrant reload,它将清除 8080 转发端口。此时,您可以从 Vagrantfile 中删除 8080 行。

注意: Vagrant 中的端口转发可以比作无线电广播。访客端口就像广播电台,而主机端口就像收音机。就像一个电台可以向任意数量的电台广播一样,Vagrant 机器上的访客端口可以转发到主机上的多个端口。但是,每个主机端口一次只能接收来自一个访客端口的转发流量,就像收音机一次只能调到一个电台一样。

因此,在这种情况下,两个无线电(主机上的端口 8601 和 8080)被调谐到同一个电台(来宾上的端口 80)。解决办法就是在 8080 处关闭无线电。

【讨论】:

  • 工作就像一个魅力!感谢您的来信。
  • 没问题。乐于助人。
  • 添加了关于端口转发如何在 Vagrant 中工作的注释。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多