2

私はこの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@precise32:/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

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
4

2 に答える 2

1

192.168.33.11 がノードを実行している仮想マシンの IP である場合、通常はローカル マシンに 192.168.33.11:3000 をロードします。curl エラー 7 は、ファイアウォールの場合にリクエストがブロックされることを意味します。

于 2014-07-06T14:21:54.017 に答える
0

古い質問ですが、これは 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 で動作しました。

于 2016-11-22T23:20:53.330 に答える