2013-05-23 17 views
8

Ho impostato la mia VM Vagrant (1.2.2) che esegue VistualBox su : private_network e ho avviato un server Sinatra su di esso. Tuttavia non sono in grado di connettermi a quell'istanza di Sinatra. Tuttavia, la VM viene eseguita e risponde ai ping.Vagrant rifiuta di connettersi in modalità private_network

Ecco il mio Vagrantfile

Vagrant.configure("2") do |config| 
    config.vm.box = "precise64" 
    config.vm.network :private_network, ip: "192.168.33.10" 
end 

Così ho avviare il Vagrant VM e ssh in esso

prodserv$ vagrant up 
Bringing machine 'default' up with 'virtualbox' provider... 
[default] Setting the name of the VM... 
[default] Clearing any previously set forwarded ports... 
[default] Creating shared folders metadata... 
[default] Clearing any previously set network interfaces... 
[default] Preparing network interfaces based on configuration... 
[default] Forwarding ports... 
[default] -- 22 => 2222 (adapter 1) 
[default] Booting VM... 
[default] Waiting for VM to boot. This can take a few minutes. 
[default] VM booted and ready for use! 
[default] Configuring and enabling network interfaces... 
[default] Mounting shared folders... 
[default] -- /vagrant 

prodserv$ vagrant ssh 
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-23-generic x86_64) 

* Documentation: https://help.ubuntu.com/ 
Welcome to your Vagrant-built virtual machine. 
Last login: Thu May 23 14:01:05 2013 from 10.0.2.2 

Quindi, fino a qui tutto va bene e dandy. Un ping al VM funzionerà bene (ho anche controllato che questo è davvero l'ip macchine virtuali. Quindi, il ping senza vagabondo fino porterà alla perdita di pacchetto)

prodserv$ ping 192.168.33.10 
PING 192.168.33.10 (192.168.33.10): 56 data bytes 
64 bytes from 192.168.33.10: icmp_seq=0 ttl=64 time=0.543 ms 
64 bytes from 192.168.33.10: icmp_seq=1 ttl=64 time=0.328 ms 

grande! Ora comincio il server sulla macchina virtuale

[email protected]:~$ sudo ruby /vagrant/server.rb 
== Sinatra/1.4.2 has taken the stage on 4567 for development with backup from Thin 
>> Thin web server (v1.5.1 codename Straight Razor) 
>> Maximum connections set to 1024 
>> Listening on localhost:4567, CTRL+C to stop 

questo è il corrispondente server.rb

require 'rubygems' 
require 'sinatra' 

get '/' do 
    puts "WOW!" 
    'Hello, world!' 
end 

se rannicchio ora dal VM guest Sinatra tutto funziona bene e " Ciao mondo!" sarà restituito.

[email protected]:~$ curl 'http://localhost:4567' 
Hello, [email protected]:~$ 

#and the Sintra/Ruby process gets me this 
WOW! 
127.0.0.1 - - [23/May/2013 16:06:36] "GET/HTTP/1.1" 200 13 0.0026 

Tuttavia, se provo a per ricciolo dalla macchina ospite il collegamento ottiene rifiutato.

prodserv$ curl -v 'http://192.168.33.10:4567' 
* About to connect() to 192.168.33.10 port 4567 (#0) 
* Trying 192.168.33.10... 
* Connection refused 
* couldn't connect to host 
* Closing connection #0 
curl: (7) couldn't connect to host 

Quindi, come va?

+0

hai ragione, non è una domanda di programmazione. – robkuz

+0

È necessario attivare il port forwarding per 4567 nel Vagrantfile. Di default, l'unica porta che avanza in avanti verso il vm in esecuzione è 22 per ssh. –

risposta

9

Sinatra sta ascoltando su localhost: 4567, invece di 0.0.0.0 quindi è disponibile solo per localhost.

+0

scusate non capisco. Cosa dovrei fare? impostare un'altra porta? – robkuz

+0

No, la porta è ok ma l'indirizzo IP di ascolto (o "indirizzo di binding" o "host") non lo è. Dovrebbe essere il carattere jolly 0.0.0.0 o l'IP del server dalla rete privata, ma non il localhost, perché con i servizi di localhost sulla tua VM è possibile connettersi. – cmur2

+0

Potrebbe essere necessario impostare l'host probabilmente sul server.rb in modo dipendente da Sinatra (non conosco Sinatra così bene). – cmur2