AWS ECS EC2启动类型下NestJS容器TCP通信报EADDRNOTAVAIL错误解决
错误产生原因
EADDRNOTAVAIL错误的本质是:你配置的监听IP地址不存在于当前容器的本地网络接口上,系统无法绑定端口到这个不存在的IP。
你当前的配置误区是把服务发现的对外访问地址错填到了NestJS TCP服务的本地监听host字段中,该字段的作用是指定容器本地要绑定的网卡IP,而非其他容器调用你时使用的目标地址。
排查与解决步骤
- 修正NestJS监听配置:直接将
host设置为0.0.0.0即可,代表监听容器内所有可用网卡,无需指定固定IP,修改后代码如下:
app.connectMicroservice({ transport: Transport.TCP, options: { host: '0.0.0.0', port: data.TcpReceive.TCP_RECEIVE_PORT } });
- 验证Task Definition端口配置:确认容器定义的
portMappings中已配置3002端口的映射规则,EC2启动类型下建议主机端口填0由ECS自动分配,避免同ECS实例上的端口冲突。 - 调整服务发现配置:服务发现中注册的访问端点与本地监听配置无关,其他服务调用该TCP服务时,再使用服务发现的端点作为目标主机地址即可。
- 容器内网络校验:进入异常容器执行
ip addr查看本地所有网卡IP,可确认之前配置的TCP_RECEIVE_HOST确实不在本地IP列表中;修改配置重启后执行netstat -tunlp可确认3002端口是否正常监听。 - 安全组校验:确认ECS实例、容器关联的安全组入站规则已放行3002端口的TCP流量,来源允许同VPC内其他服务的安全组ID即可。
内容的提问来源于stack exchange,提问作者Kajanthan
相关产品推荐
相关产品推荐

