如何排查Vagrant虚拟机中NestJS服务器的ECONNREFUSED错误?
问题排查与解决方案
针对你在Arch主机上无法访问Vagrant虚拟机中NestJS服务(返回ECONNREFUSED)的问题,结合你提供的信息,按以下步骤排查:
1. 检查NestJS服务器的监听地址
默认情况下,app.listen(3000)只会监听虚拟机的127.0.0.1回环地址,仅允许虚拟机内部访问,外部主机无法连接,这是此类问题最常见的原因。
验证监听地址:登录
netcap_backend虚拟机,执行命令:ss -tulpn | grep 3000如果输出中
Local Address列显示127.0.0.1:3000,说明服务仅监听回环地址。修复方法:修改
main.ts中的监听代码,指定监听所有网卡(0.0.0.0):async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors({ allowedHeaders: '*', origin: '*', credentials: true, }); await app.listen(3000, '0.0.0.0'); // 新增监听地址参数 } bootstrap();重启NestJS服务后再次验证监听地址。
2. 检查虚拟机内部防火墙规则
如果虚拟机启用了防火墙(如ufw、firewalld),可能阻止了3000端口的外部访问。
- 临时关闭防火墙测试:
- 若使用
ufw:sudo ufw disable - 若使用
firewalld:sudo systemctl stop firewalld
ufw:sudo ufw allow 3000/tcp sudo ufw enablefirewalld:sudo firewall-cmd --add-port=3000/tcp --permanent sudo firewall-cmd --reload
- 若使用
3. 确认虚拟机私有网络IP正确性
你提供的Vagrant配置注释中写的是192.165.56.101,但问题描述中使用的是192.168.56.101,需确认虚拟机实际IP:
- 登录虚拟机执行:
找到私有网络网卡(通常是ip addrenp0s8或类似名称)的IP,确保与你访问的IP一致。
4. 检查Arch主机的防火墙设置
Arch主机的防火墙可能阻止了对虚拟机3000端口的访问:
- 临时关闭主机防火墙测试:
- 若使用
ufw:sudo ufw disable - 若使用
firewalld:sudo systemctl stop firewalld
- 若使用
5. 验证NestJS服务状态
确认NestJS服务是否正常运行且无端口冲突:
- 查看服务进程:
ps aux | grep node - 查看服务启动日志,确认是否有端口占用或启动失败的错误信息。
内容的提问来源于stack exchange,提问作者FalseStatement
相关产品推荐
相关产品推荐

