Docker部署Directus 9无法连接AWS RDS Postgres 15:pg_hba.conf无条目错误
问题:Docker中Directus 9连接AWS RDS Postgres 15失败,提示无加密连接权限
环境与现状
- 运行环境:macOS M1、Docker Engine 20、Directus 9、AWS RDS Postgres 15
- 本地通过Postico可正常连接RDS,说明VPC公网远程连接正常;同时能连接
host.docker.internal上的本地Postgres数据库 - 尝试在RDS参数组设置
rds.force_ssl = 0取消加密连接要求,但未生效 - 执行
docker compose up时出现如下错误:
ERROR: no pg_hba.conf entry for host "XX.XXX.XX.XX", user "postrgres", database "EXAMPLEDB", no encryption directus | err: { directus | "type": "DatabaseError", directus | "message": "no pg_hba.conf entry for host \"XX.XXX.XX.XX\", user \"postrgres\", database \"EXAMPLEDB\", no encryption", directus | "stack":
当前Docker Compose配置
克隆Directus仓库通过docker-compose.yml构建镜像,未使用.env文件,所有配置均写入该文件:
services: database: container_name: database image: postgis/postgis:13-master # Required when running on platform other than amd64, like Apple M1/M2: #platform: linux/amd64 #volumes: # - ./data/database:/var/lib/postgresql/data2 networks: - directus environment: POSTGRES_USER: 'directus' POSTGRES_PASSWORD: 'directus' POSTGRES_DB: 'directus' directus: environment: DB_CLIENT: 'postgres' DB_HOST: 'xxx.rds.amazonaws.com' DB_PORT: '5432' DB_DATABASE: 'XXXX' DB_USER: 'postrgres' DB_PASSWORD: 'XXX' directus exited with code 1
疑问
- 无法修改RDS的
pg_hba.conf,也不应将其作为解决方案 - 怀疑是否Docker镜像未安装SSL导致该错误?使用的是Directus官方仓库提供的所有Dockerfile及文件
- 请求该错误的可能原因及解决方案
可能原因及解决方案
1. 用户名拼写错误(优先排查)
错误信息和配置中的用户名都是postrgres,正确的Postgres默认用户名是postgres(少了一个字母e)。这个拼写错误会导致RDS无法识别用户,进而触发加密相关的错误提示。先修正DB_USER字段为postgres。
2. 强制开启SSL连接(推荐方案)
AWS RDS Postgres默认要求SSL连接,即使设置rds.force_ssl=0,也可能因参数组未重启生效或RDS安全策略优先级问题无效。正确做法是在Directus配置中强制启用SSL:
在directus服务的environment中添加以下配置:
DB_SSL: 'true' DB_SSL_REJECT_UNAUTHORIZED: 'false' # 使用RDS默认证书时可设为false,若需验证证书可指定证书路径
修正后的directus环境配置示例:
directus: environment: DB_CLIENT: 'postgres' DB_HOST: 'xxx.rds.amazonaws.com' DB_PORT: '5432' DB_DATABASE: 'XXXX' DB_USER: 'postgres' # 修正拼写 DB_PASSWORD: 'XXX' DB_SSL: 'true' DB_SSL_REJECT_UNAUTHORIZED: 'false'
3. 确认RDS参数组修改已生效
若坚持关闭SSL,需确保:
- 修改
rds.force_ssl=0的参数组已关联到目标RDS实例 - 已重启RDS实例(RDS参数组修改不会立即生效,必须重启才能应用)
4. Docker镜像SSL支持说明
Directus官方镜像基于Node.js,已包含SSL所需依赖,无需额外安装。问题大概率不在镜像本身,而是配置或RDS策略问题。
内容的提问来源于stack exchange,提问作者user74847
相关产品推荐
相关产品推荐

