无法从Vagrant主机访问Node Express应用程序

5

我是网络和端口分配方面的新手。我一直在使用 vagrant,并且在尝试启动测试环境并通过主机浏览器访问时从未遇到任何问题。我的 Vagrantfile 中的设置如下:

# network stuff
config.vm.network "forwarded_port", guest: 8000, host: 8000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.hostname = "test-box-debian"

现在我正在尝试学习一些关于node.js的知识,每个教程都说我可以运行“npm start”,实际上这很好用。我可以调用“wget localhost:3000”(端口3000是express的默认值),并从express返回“index.html”的默认页面。
然而,当我试图从主机浏览器访问“192.168.33.10:3000”时,它无法工作。我可以运行netstat并得到以下结果:
sudo netstat -ltpn | grep 3000
tcp6       0      0 :::3000                 :::*                         LISTEN      17238/node  

我能看到有些东西不对劲,但是我对端口和网络知识不足,不知道出了什么问题以及如何解决。

3个回答

6

首先,确保您的服务器正在监听正确的IP地址,并且未在其他地方绑定Express侦听器:

.listen(3000),而不是 .listen(3000, '127.0.0.1')

另外,尝试将Express服务器绑定到您的私有IP或通配符IP,看看是否解决了连接问题:

// Wildcard (All IP's) binding
  .listen(3000, '0.0.0.0')

// Specific binding
  .listen(3000, '192.168.33.10')

最后,从主机访问端口3000可能不可用。如果您的服务器代码中上述选项都无法使用,请尝试将以下行添加到Vagrantfile中:

config.vm.network "forwarded_port", guest: 3000, host: 3000


这些都没有起作用。我可能会尝试启动一个新的盒子,看看会发生什么。 - eignhpants
1
你太棒了!这个可行!现在我就不用自杀了! - Huntario

4

1
如果您的Vagrant设置如下:
# network stuff
config.vm.network "forwarded_port", guest: 8000, host: 8000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.hostname = "test-box-debian"

然后你的节点应用程序应该监听 192.168.33.10:8000

const http = require('http');

const hostname = '192.168.33.10';
const port = 8000;

const server = http.createServer((req, res) => {
 res.statusCode = 200;
 res.setHeader('Content-Type','text/plain');
 res.end('Hello World\n');
})


server.listen(port, hostname, () => {
 console.log('Server running at');
})

这对我有帮助。我目前正在运行基于 https://github.com/rattfieldnz/Vaprobash/ 的开发服务器,尽管正在更深入地研究 Docker。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接