You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查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 enable
      
    • firewalld:
      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 addr
    
    找到私有网络网卡(通常是enp0s8或类似名称)的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:25:35