web-dev-qa-db-fra.com

Connexion réinitialisée lors du transfert de port avec Vagrant

J'ai Vagrant/VirtualBox exécutant un système d'exploitation Ubuntu 12.04 LTS. J'ai configuré Vagrant pour transférer le port invité 8000 vers mon port hôte 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! 

Lorsque la machine virtuelle démarre, je démarre un serveur de développement Django sur le port 8000.

Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Très bien, je peux le mettre en arrière-plan et je peux même curl localhost:8000 et obtenir une sortie du serveur 

<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>

Mais lorsque j'essaie de frapper le serveur depuis mon ordinateur hôte avec Firefox/Chrome/Telnet, la connexion est réinitialisée/Connexion perdue/ERR_CONNECTION_RESET, etc.

J'ai d'abord pensé que c'était peut-être quelque chose d'iptables, mais il s'avère que Ubuntu a tout autorisé par défaut. J'ai également désactivé le pare-feu sur mon ordinateur hôte. Comment puis-je aller au fond des choses?

28
Mark

J'ai eu Django à l'écoute sur 127.0.0.1:8000 (par défaut) 

Comme expliqué dans la réponse de Mitchell ici: La redirection de port de Vagrant ne fonctionne pas J'aurais dû écouter sur 0.0.0.0. Voici une citation de sa réponse: 

Je voulais ajouter une note supplémentaire selon laquelle cela est souvent causé par le serveur au sein de VM car il se lie à 127.0.0.1, qui est un bouclage . Assurez-vous que le serveur est lié à 0.0.0.0 pour que toutes les interfaces peuvent y accéder.

Si vous utilisez Django, vous voulez démarrer le serveur de développement de la manière suivante: ./manage.py runserver 0.0.0.0:8000

77
Mark

Une autre solution consiste à utiliser ssh tunneling with vagrant . Ouvrez un terminal et cd dans le répertoire où votre Vagrantfile est . En supposant que votre machine virtuelle est opérationnelle (vagrant up), exécutez la commande suivante.

# save vagrant ssh config to a file named `vagrant-ssh-config`
vagrant ssh-config > vagrant-ssh-config

Transférez ensuite le port 8000 de l'invité à l'hôte.

ssh -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default

Maintenant, ouvrez votre navigateur et vérifiez 127.0.0.1:8000

Notez que la commande précédente ouvrira également un shell sur serveur ssh. Si vous voulez ouvrir le tunnel ssh sans un shell sur le serveur ssh, ajoutez -N

ssh -N -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default
1
Levon