如何在Vagrant中删除转发的端口?

时间:2016-01-15 18:18:02

标签: vagrant port

我下载了一个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?

2 个答案:

答案 0 :(得分:7)

您可以明确禁用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转发端口。此时,您可以从Vagrant文​​件中删除8080行。

注意: Vagrant中的端口转发可以与无线电广播进行比较。访客端口就像无线电台,而主机端口就像无线电一样。与无线电台可以广播到任意数量的无线电的方式相同,Vagrant机器上的客户端口可以转发到主机上的多个端口。但是,每个主机端口一次只能从一个访客端口接收转发的流量,就像一次只能将一个无线电调到一个站一样。

因此,在这种情况下,两个无线电(主机上的端口8601和8080)被调谐到同一个站(客户端上的端口80)。解决方案只是在8080关闭收音机。

答案 1 :(得分:1)

如果您能够使用http://<IP_ADDRESS_OF_BOX>,我觉得您使用vagrant private network使用静态IP,在这种情况下,所有端口都可以在IP上访问,而您不一定需要forward_port选项。

netstat带有您的选项时,sudo netstat -tulpn运行extension Calendar { static let utc: Calendar = { var calendar = Calendar.current calendar.timeZone = TimeZone(identifier: "UTC")! return calendar }() static let localTime: Calendar = { var calendar = Calendar.current calendar.timeZone = .current return calendar }() } ,这样您就可以找到后面的PID /程序名称