首页 文章

使用NodeJs和vagrant

提问于
浏览
1

我有这个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:

$ telnet 192.168.33.11:3000
Trying 192.168.33.11:3000...
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused

尝试卷曲--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

2 回答

  • 0

    如果192.168.33.11是运行节点的虚拟机的IP,则通常在本地计算机上加载192.168.33.11:3000 . 卷曲错误7表示在防火墙的情况下请求被阻止 .

  • 1

    虽然这是一个老问题,但对于那些在较新版本的Node / Vagrant上偶然发现它的人来说,这是一个解决方案 .

    似乎Node不再需要端口转发通过Vagrant工作 . 实际上,在VM中将节点示例本身运行在127.0.0.1上时,没有转发端口配置对我有用 .

    相反,让节点服务器在您在Vagrantfile中指定的专用网络ip上运行 . 在上面的示例中,等于 listen(3000, '192.168.33.11'); .

    在Win 10和macOS Mavericks上为Node 4.2.6和Vagrant 1.8.7工作 .

相关问题