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

EC2上Docker容器应用无法连接RDS Postgres,但Shell可正常连接

解决RDS Postgres连接"no pg_hba.conf entry... no encryption"问题

问题根源

错误日志里的no encryption是核心原因——你的AWS RDS Postgres实例默认强制要求SSL连接,但应用代码在连接数据库时未启用SSL加密。而EC2/容器里的psql命令会自动适配SSL要求,所以能正常连接,应用却不行。另外你修改EC2实例里的pg_hba.conf完全没用,因为RDS的数据库配置由AWS管理,你无法直接修改RDS的pg_hba.conf。

解决步骤

1. 确认RDS的SSL强制设置(可选,用于验证)

登录AWS控制台,进入你的RDS Postgres实例:

  • 切换到「连接与安全性」标签
  • 查看「SSL」选项,确认是「强制SSL」状态(默认就是该配置)

2. 修改应用的数据库连接配置,启用SSL

根据你使用的Node.js pg库,按以下两种方式之一调整连接配置:

方式1:修改连接URL

在数据库连接URL末尾添加SSL模式参数:

postgres://masteruser:password@rds-endpoint:5432/postgres?sslmode=require

方式2:修改连接配置对象

如果使用配置对象的方式初始化连接池:

const { Pool } = require('pg');
const pool = new Pool({
  user: 'masteruser',
  host: 'rds-endpoint',
  database: 'postgres',
  password: 'your-password',
  port: 5432,
  ssl: {
    rejectUnauthorized: false // 快速测试用,生产环境建议配置RDS官方CA证书
  }
});

生产环境建议下载AWS官方的RDS CA证书,配置ca参数指向证书文件以确保连接安全:

const fs = require('fs');
// ...
ssl: {
  ca: fs.readFileSync('/path/to/rds-ca-2019-root.pem').toString()
}

3. 重启应用容器

修改配置后,执行以下命令重启应用容器,测试数据库交互功能:

docker-compose down && docker-compose up -d

补充说明

  • 你之前配置RDS安全组的操作无问题(因为psql能正常连接),无需再调整安全组
  • RDS的pg_hba.conf由AWS维护,用户无法直接编辑,所有连接授权和SSL要求需通过RDS控制台或参数组配置

内容的提问来源于stack exchange,提问作者Thomas Ravetto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:03:32