django - Restablecimiento de la conexión cuando el reenvío de puertos con Vagrant
ubuntu-12.04 portforwarding (3)
Tengo Vagrant / VirtualBox ejecutando un sistema operativo Ubuntu 12.04 LTS. He configurado Vagrant para reenviar el puerto invitado 8000 a mi puerto host 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!
Cuando la máquina virtual se inicia, inicio un servidor de desarrollo Django en el puerto 8000.
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
De acuerdo, genial, puedo ponerlo en segundo plano e incluso puedo curl localhost:8000
y obtener algo de salida del servidor
<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>
Pero cuando intento conectarme al servidor desde mi máquina host con Firefox / Chrome / Telnet, obtengo Restablecimiento de conexión / Conexión perdida / ERR_CONNECTION_RESET etc.
Primero pensé que podría ser algo de iptables, pero resulta que Ubuntu tiene por defecto permitir todo. También apagué el firewall en mi máquina host. ¿Cómo puedo llegar al fondo de esto?
1). El proyecto debe ejecutarse como python manage.py runserver 0.0.0.0:8000
.
Si esto no es arreglar tu problema entonces
2). Abra su Vagrantfile y agregue
config.vm.network "forwarded_port", guest: 8000, host: 8001
esto después
# config.vm.network "forwarded_port", guest: 80, host: 8080
line
Este trabajo en mi caso;)
Nota: Esta información de puerto de reenvío se proporciona cuando se ejecuta vagrant up
....
==> default: Forwarding ports...
default: 8000 => 8001 (adapter 1)
default: 22 => 2222 (adapter 1)
Otra solución es usar ssh tunneling con vagrant. Abra una terminal y cd
en el directorio donde se encuentra su Vagrantfile
. Suponiendo que su vm está en funcionamiento ( vagrant up
), ejecute el siguiente comando.
# save vagrant ssh config to a file named `vagrant-ssh-config`
vagrant ssh-config > vagrant-ssh-config
Posteriormente reenviará el puerto del invitado 8000 al host.
ssh -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default
Ahora solo abre tu navegador y comprueba 127.0.0.1:8000
.
Tenga en cuenta que el comando anterior también abrirá un shell en el servidor ssh. Si desea abrir el túnel ssh sin un shell en el servidor ssh agregue -N
ssh -N -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default
Tenía a Django escuchando en 127.0.0.1:8000 (predeterminado)
Como se explica en la respuesta de Mitchell aquí: el reenvío de puertos de Vagrant no funciona . Debería haber estado escuchando el 0.0.0.0. Aquí hay una cita de su respuesta:
Quería agregar una nota adicional que a menudo esto es causada por el servidor dentro de la VM porque se enlaza a 127.0.0.1, que es loopback. Querrá asegurarse de que el servidor esté vinculado a 0.0.0.0 para que todas las interfaces puedan acceder a él.
Si está utilizando Django, desea iniciar el servidor dev de esta manera: ./manage.py runserver 0.0.0.0:8000