我可以通过编程方式访问Vagrant的自动更正端口转发吗?

时间:2015-01-19 08:29:45

标签: port vagrant vagrantfile

我在Vagrantfile中对端口转发进行了硬编码,现在它与我机器上运行的另一个盒子发生冲突。

我知道Vagrant可以detect port collisions and correct them。但我正在运行的一个配方取决于知道其他配置的端口。

我可以通过编程方式找出Vagrant检测到哪个端口未使用,以便配方可以使用它吗?

2 个答案:

答案 0 :(得分:1)

此处没有内置命令,但如果您使用VirtualBox作为提供程序,则可以使用以下命令获取端口信息:

$ VBoxManage showvminfo $(cat .vagrant/machines/default/virtualbox/id) --details --machinereadable | egrep Forwarding

为您提供类似于:

的输出
Forwarding(0)="ssh,tcp,127.0.0.1,2222,,22"
Forwarding(1)="tcp8080,tcp,,8080,,80"

在上面,VM的端口22被转发到主机的2222,以及80到8080.

使用vagrant的VMNAME命令可以找到global-status

$ vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
78cf051  default virtualbox running /path/to/Vagrantfile

在上面的示例中,defaultVMNAME

答案 1 :(得分:1)

安装vagrant-portinfo插件:

$ vagrant plugin install vagrant-portinfo`
$ vagrant portinfo
server1 (84a1587) running
------------------------------------------------
guest: 22       host: 2201
guest: 8080     host: 8083

你必须做一些grepping来解析输出。添加对转发端口的程序化查询已经在Vagrant的路线图上已经存在多年了,而且还有open issue discussing it