如何从宿主机访问VirtualBox中Linux虚拟机的Node/Express应用?
解决VirtualBox虚拟机中Node/Express应用宿主机无法访问的问题
核心问题:服务器绑定地址限制
你的代码里把服务器绑定到了127.0.0.1,这个地址是虚拟机的回环地址,只能在虚拟机内部访问,宿主机无法通过网络连接到这个地址。这就是虚拟机内可正常访问、但宿主机打不开的原因。
修复代码
把hostname的值改成0.0.0.0,这样服务器会监听虚拟机所有可用的网络接口,包括VirtualBox端口转发对应的网卡:
const http = require("http"); const express = require('express') const cors = require('cors'); const app = express() const server = http.createServer(app); const hostname= '0.0.0.0'; // 修改此处 const PORT = process.env.PORT || 8080 app.use(cors()) app.get('/', (req, res) => { res.send('Hello World') }) server.listen(PORT, hostname, () => { console.log(`Listening on ${hostname}:${PORT}`); })
额外排查点
虽然你已配置端口转发且Apache能正常访问,仍建议确认以下内容:
- 虚拟机防火墙是否开放了8080端口:
- Ubuntu/Debian系统:执行
sudo ufw allow 8080 - CentOS/RHEL系统:执行
sudo firewall-cmd --add-port=8080/tcp --permanent,再执行sudo firewall-cmd --reload
- Ubuntu/Debian系统:执行
- VirtualBox端口转发规则是否正确:确保宿主机端口(比如8080)转发到虚拟机的8080端口,协议选择TCP
- 重启修改后的Node应用,确认控制台输出
Listening on 0.0.0.0:8080
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

