我有这个Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "hashicorp/precise32"
config.vm.network "forwarded_port", guest: 80, host: 3000
config.vm.network "private_network", ip: "192.168.33.11"
end
我的目标是为nodejs运行虚拟机。我已经正确安装了节点。在“vagrant ssh”之后,我用这个内容创建了一个文件“index.js”:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3000/');
来自vagrant @ exact32:/ vagrant $,当我运行“curl localhost:3000”时,我得到“Hello world”。但是,......
我需要做什么,在本地机器上打开浏览器并获得相同的“Hello world”?
如果我试图“卷曲”我的虚拟机的ip,我得到了这个:
$ curl 192.168.33.11:3000
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused
尝试远程登录:
$ telnet 192.168.33.11:3000
Trying 192.168.33.11:3000...
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused
尝试curl --verbose 仍然不使用端口3000
$ curl --verbose 192.168.33.11:3000
* About to connect() to 192.168.33.11 port 3000 (#0)
* Trying 192.168.33.11...
* Adding handle: conn: 0x7f8f5a803a00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f8f5a803a00) send_pipe: 1, recv_pipe: 0
* Failed connect to 192.168.33.11:3000; Connection refused
* Closing connection 0
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused
与端口80完美配合
$ curl --verbose 192.168.33.11
* About to connect() to 192.168.33.11 port 80 (#0)
* Trying 192.168.33.11...
* Adding handle: conn: 0x7fc93b802000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fc93b802000) send_pipe: 1, recv_pipe: 0
* Connected to 192.168.33.11 (192.168.33.11) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.30.0
> Host: 192.168.33.11
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 07 Jul 2014 07:06:25 GMT
* Server Apache/2.2.22 (Ubuntu) is not blacklisted
< Server: Apache/2.2.22 (Ubuntu)
< Last-Modified: Sun, 06 Jul 2014 13:53:47 GMT
< ETag: "4811a4-bb-4fd86b009e369"
< Accept-Ranges: bytes
< Content-Length: 187
< Vary: Accept-Encoding
< Content-Type: text/html
< X-Pad: avoid browser bug
<
<html><body><h1>It works un casino!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
* Connection #0 to host 192.168.33.11 left intact
答案 0 :(得分:1)
如果192.168.33.11是运行虚拟机的IP节点,那么通常在本地计算机上加载192.168.33.11:3000。卷曲错误7表示在防火墙的情况下请求被阻止。
答案 1 :(得分:0)
虽然这是一个老问题,但对于那些在较新版本的Node / Vagrant上偶然发现它的人来说,这是一个解决方案。
似乎Node不再需要端口转发才能通过Vagrant工作。事实上,在我将Node示例本身运行在VM中的127.0.0.1上时,没有转发端口配置对我有用。
相反,让节点服务器在您在Vagrantfile中指定的专用网络ip上运行。在上面的示例中,它等同于150f
。
在Win 10和macOS Mavericks上为Node 4.2.6和Vagrant 1.8.7工作。