How can Vagrant forward multiple ports on the same machine?
I'm wondering how to setup a Vagrant file that will put up a machine with two ports forwarded. This is my current Vagrantfile, which is forwarding the 8080 page:
Vagrant.configure("2") do |config|
config.vm.box = "precise32"
config.vm.box_url = "http://files.vagrantup.com/precise32.box"
config.vm.provider "virtualbox"
config.vm.network :forwarded_port, guest: 8080, host: 8080
config.vm.provision :shell, :path => "start.sh", :args => "'/vagrant'"
config.vm.network :public_network
end
Thanks!
Solution 1:
If you want to forward two ports, you may simply add another line like this:
config.vm.network :forwarded_port, guest: 8080, host: 8080
config.vm.network :forwarded_port, guest: 5432, host: 5432
A better way, in my opinion, is to setup a private network (or host-only network), so that you don't have to forward all the ports manually.
See my post here: Vagrant reverse port forwarding?
Additional tips
If you use the :id
feature when defining :forward_port
entries you need to make sure that each is unique. Otherwise they'll clobber each other, and the last one defined will typically win out.
For example:
config.vm.network "forwarded_port", guest: 8080, host: 8080, id: 'was_appserver_http'
config.vm.network "forwarded_port", guest: 9043, host: 9043, id: 'ibm_console_http'
config.vm.network "forwarded_port", guest: 9060, host: 9060, id: 'ibm_console_https'
Solution 2:
You can forward as many ports as you want (if those ports are not used by host machine), as following:
# for Redis
config.vm.network "forwarded_port", guest: 6379, host: 6379
# for HTTP
config.vm.network "forwarded_port", guest: 80, host: 80
# for MySQL
config.vm.network "forwarded_port", guest: 3306, host: 3306
If you want to forward a range of ports, for loop
also can be used like this:
for i in 81..89
config.vm.network :forwarded_port, guest: i, host: i
end
for i in 8080..8089
config.vm.network :forwarded_port, guest: i, host: i
end
Solution 3:
If you are using chef kitchen, then the ports are set in the .kitchen.yml file as follows:
---
driver:
name: vagrant
network:
- ["forwarded_port", {guest: 80, host: 40080}]
- ["forwarded_port", {guest: 443, host: 40443}]
provisioner:
...
this will put the following lines in the .kitchen/kitchen-vagrant/Vagrantfile:
c.vm.network(:forwarded_port, {:guest=>80, :host=>40080})
c.vm.network(:forwarded_port, {:guest=>443, :host=>40443})
don't forget to do a kitchen destroy and kitchen create.
see:
http://www.jeeatwork.com/?p=76
https://github.com/test-kitchen/kitchen-vagrant#-network
https://docs.chef.io/config_yml_kitchen.html