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

基于Docker Compose部署的Flask-SQLAlchemy旧应用出现pg_hba.conf认证错误的排查求助

解决PostgreSQL "no pg_hba.conf entry for host" 错误的方案

这个错误的核心原因是:PostgreSQL的pg_hba.conf配置文件中没有允许你的Flask容器(IP 172.24.0.3)以用户flask身份无加密访问flask_dev数据库的规则。虽然你说没修改配置,但大概率是Postgres镜像更新后默认安全规则变严格了,或者持久化的数据库卷里的配置被意外改动了。

下面是几个可行的解决方案,按操作复杂度从低到高排序:

方案1:修改数据库连接URL,禁用SSL(快速测试)

直接在你的__init__.py中修改数据库连接字符串,加上sslmode=disable参数,告诉psycopg2不要使用SSL加密连接(Docker内部网络本身是安全的,无需额外加密):

app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://flask:flask@db:5432/flask_dev?sslmode=disable"

修改后重新构建并启动容器:

docker-compose down && docker-compose up --build

这个方法最快,适合快速验证问题是否解决。

方案2:修改PostgreSQL的pg_hba.conf,允许Docker网络访问

如果不想禁用SSL,或者需要更严格的配置,可以直接修改Postgres的pg_hba.conf文件,添加允许Docker backend网络访问的规则:

  1. 先进入Postgres容器查看当前的pg_hba.conf:
docker exec -it hawala-system-db-1 cat /var/lib/postgresql/data/pg_hba.conf
  1. 在项目根目录创建一个自定义的pg_hba.conf文件,复制原有内容并添加一行允许Docker网络的规则(假设你的Docker backend网络子网是172.24.0.0/16,可以从错误日志的IP推断):
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
# 允许来自Docker backend网络的flask用户访问flask_dev数据库
host    flask_dev       flask           172.24.0.0/16           scram-sha-256
  1. 修改docker-compose.yml的db服务,添加挂载自定义pg_hba.conf的配置:
services:
  db:
    environment:
      - POSTGRES_USER=flask
      - POSTGRES_PASSWORD=flask
      - POSTGRES_DB=flask_dev
    image: postgres:latest
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf  # 添加这一行
    ports:
      - "5400:5432"
    networks:
      - backend
    restart: always
  1. 重启容器生效:
docker-compose down && docker-compose up

方案3:重置Postgres持久化卷(数据会丢失,谨慎操作)

如果以上方法都无效,可能是持久化的postgres_data卷中存在损坏的配置或数据。可以尝试重置卷(注意:这会删除所有数据库数据,只适合测试环境):

docker-compose down -v
docker-compose up --build

这个操作会删除postgres_data卷,让Postgres重新初始化数据库和配置文件,回到默认状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:19:07