我在Vagrantfile中对端口转发进行了硬编码,现在它与我机器上运行的另一个盒子发生冲突。
我知道Vagrant可以detect port collisions and correct them。但我正在运行的一个配方取决于知道其他配置的端口。
我可以通过编程方式找出Vagrant检测到哪个端口未使用,以便配方可以使用它吗?
答案 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
在上面的示例中,default
是VMNAME
。
答案 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。