Docker 无法连接到 Postgres RDS 错误:没有针对主机的 pg_hba.conf 条目。

7

我正在尝试连接运行在 Docker 引擎 20 上的 macOS M1 上的 Directus 9 的本地实例,与 AWS RDS Postgres 15 进行连接。

我能够使用 Postico 在本地连接到 RDS 数据库,因此通过 VPC 的公共远程连接是正常工作的。我还能够连接到我的本地 Postgres 数据库 host.docker.internal

我尝试在 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":

我相信这意味着生产Postgres数据库不允许非加密连接。

我已经克隆了Directus repo并使用docker从docker-compose.yml构建。我没有使用.env文件进行配置,而是将所有内容放入此compose文件中。 今天我刚接触docker,还不完全理解如何正确编写此配置,我参考了这个指南https://docs.directus.io/self-hosted/config-options.html#database

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或其他原因吗?

我使用了https://github.com/directus/directus提供的所有Dockerfile和文件。

对于这个错误,有什么可能的原因和解决方案吗?


1
如果您配置Postico禁用SSL使用,会发生什么情况?那么您是否会像直接使用时一样遇到错误? - jjanes
@jjanes:“Postico始终尝试通过加密连接(SSL)连接到PostgreSQL服务器。”我已经尝试过几个其他免费客户端,但都没有找到一个非加密连接的。调查仍在进行中。 - user74847
1
使用 psql。它是免费的,随PostgreSQL一起提供,并且是最熟悉的工具,对于那些能够最好地帮助您的人来说。它默认首选使用SSL,但您可以通过设置环境变量PGSSLMODE=disable或在连接字符串中包含 'sslmode=disable' 来禁用它。 - jjanes
3个回答

3

解决方案:

  1. 存在SSL问题,可能与在RDS中使用自签名证书有关,我在docker-compose.yml中设置了以下ENV变量:

DB_SSL__REJECT_UNAUTHORIZED: false

这样就解决了这个问题。然后...

  1. RDS数据库的用户名不正确,数据库用户应该如下:postrgres -> postgres

对我来说,问题只是我的数据库连接错误地设置为sslmode=disable。回到SSL模式解决了这个问题。 - Otor

2
在我的情况下,这是由于RDS的SSL设置,即rds.force_ssl。

0

https://docs.directus.io/self-hosted/config-options.html#database 上写着:pg 或 postgres 之一。 - user74847

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接