我下载了一个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?
答案 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 /程序名称