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

如何从TypeORM连接Amazon RDS PostgreSQL?解析失败问题排查

解决TypeORM连接AWS RDS PostgreSQL报getaddrinfo ENOTFOUND的问题

我最近碰到了一个挺棘手的问题:用Docker里的PostgreSQL客户端能顺利连接AWS RDS PostgreSQL实例,但本地Node.js环境下用TypeORM连接时,却一直弹出getaddrinfo ENOTFOUND的错误。

我的场景细节

  • 成功的Docker连接命令:

    docker run -it --rm jbergknoff/postgresql-client postgresql://username:******@somepostgres.sometext.us-west-2.rds.amazonaws.com:5432
    

    这条命令能正常连接上RDS实例,没有任何问题。

  • TypeORM的连接配置:

    { 
      type: 'postgres', 
      logging: true, 
      host: process.env.DB_HOST, 
      port: 5432, 
      username: process.env.DB_USERNAME, 
      password: process.env.DB_PASSWORD, 
      database: process.env.DB_NAME, 
      entities: [__dirname + '/**/*.entity{.ts,.js}'], 
      synchronize: true, 
      extra: { ssl: true } 
    }
    

    配置里的环境变量和Docker命令中的信息完全一致,没有配置错误。

遇到的错误信息

[Nest] 25882 - 06/09/2019, 12:19 PM [TypeOrmModule] Unable to connect to the database. Retrying (1)... +3291ms 
Error: getaddrinfo ENOTFOUND postgres.sometext.us-west-2.rds.amazonaws.com postgres.sometext.us-west-2.rds.amazonaws.com.com:5432 
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:58:26)

排查与解决过程

一开始我怀疑是TypeORM的配置问题,比如SSL设置或端口错误,但反复核对后都没问题。后来尝试用RDS实例的IP地址替换域名,结果TypeORM能正常连接了——这说明问题出在域名解析上,而非数据库本身的权限或配置问题。

进一步排查发现,是本地Node.js使用的系统DNS配置无法解析RDS的域名。在Linux系统中,我们可以修改/etc/resolv.conf文件,换成谷歌的公共DNS来解决:

# /etc/resolv.conf
# 使用谷歌公共DNS
nameserver 8.8.8.8
nameserver 8.8.4.4

修改完成后重启Node.js服务,TypeORM就能正常通过域名连接RDS了。

原因分析

Docker容器本身有独立的DNS配置,所以它能正常解析RDS的域名;而本地Node.js环境使用的是系统默认的DNS服务器,这个服务器无法解析RDS的域名,才导致了getaddrinfo ENOTFOUND错误。

内容的提问来源于stack exchange,提问作者below-1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:11:43