I have Vagrant/VirtualBox running an Ubuntu 12.04 LTS OS. I have configured Vagrant to forward the guest port 8000 to my host port 8888.
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 8000 => 8888 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
When the virtual machine starts up, I start a Django dev server on port 8000.
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Okay great, I can put it in the background and I can even curl localhost:8000
and get some output from the server
<div id="explanation">
<p>
You're seeing this message because you have <code>DEBUG = True</code> in your
Django settings file and you haven't configured any URLs. Get to work!
</p>
</div>
But when I try to hit the server from my host machine with a Firefox/Chrome/Telnet I'm getting Connection Reset/Connection Lost/ERR_CONNECTION_RESET etc.
First I thought it may be some iptables thing, but it turns out Ubuntu has default allow everything. I also turned off the firewall on my host machine. How can I get to the bottom of this?
I had Django listening on 127.0.0.1:8000 (default)
As explained in Mitchell's answer here: Vagrant's port forwarding not working I should have been listening on 0.0.0.0. Here is a quote of his answer:
If you're using Django, you want to start the dev server like this:
./manage.py runserver 0.0.0.0:8000
1). Project must be run as
python manage.py runserver 0.0.0.0:8000
.if this is not fix your problem then
2). Open your Vagrantfile and add
config.vm.network "forwarded_port", guest: 8000, host: 8001
this after# config.vm.network "forwarded_port", guest: 80, host: 8080
lineThis work in my case ;)
Note: This forward port info provided when run
vagrant up
....
==> default: Forwarding ports...
Another solution is to use ssh tunneling with vagrant. Open up a terminal and
cd
into the directory where yourVagrantfile
is. Assuming your vm is up and running (vagrant up
) execute the following command.Afterwards forward guest's port 8000 to host.
Now just open your browser and check
127.0.0.1:8000
.Note that the previous command will also open a shell on ssh server. If you want to open ssh tunnel without a shell on ssh server add
-N
Update: Oct 4 2019
A simpler solution to forward port
Tested on Vagrant 2.0.2, but may work for older versions as well.