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

PostgreSQL 17.1(Docker部署)频繁出现postgres用户认证失败,如何排查发起方?

排查PostgreSQL认证失败请求来源的方法

1. 增强日志输出,获取客户端详情

PostgreSQL默认日志不会记录发起请求的客户端IP和端口,得先改配置把这些关键信息打出来:

  • 进入你的PostgreSQL容器:
    docker exec -it <PG容器名/ID> bash
    
  • 编辑/var/lib/postgresql/data/postgresql.conf,修改以下参数:
    log_connections = on          # 开启连接日志
    log_hostname = on             # 记录客户端主机名(也可以只记IP)
    log_line_prefix = '%t [%p]: user=%u,db=%d,client=%h:%p '  # 自定义日志格式,包含关键信息
    
  • 保存后重启容器生效:
    docker restart <PG容器名/ID>
    

2. 从更新后的日志定位请求来源

重启后再出现认证失败日志时,会看到类似这样的内容:

2025-03-05 07:33:40.707 UTC [57]: user=postgres,db=postgres,client=192.168.1.100:54320 FATAL: password authentication failed for user "postgres"
2025-03-05 07:33:40.707 UTC [57]: user=postgres,db=postgres,client=192.168.1.100:54320 DETAIL: Connection matched file "/var/lib/postgresql/data/pg_hba.conf" line 128: "host all all all scram-sha-256"

其中client=192.168.1.100:54320就是发起请求的客户端IP和端口。

3. 根据IP排查请求发起方

  • 如果是宿主机IP:检查宿主机上的定时任务、监控脚本、或者其他应用,看是不是还在用旧密码连PG;也可能是其他Docker容器通过宿主机端口发起的请求,用docker ps看运行中的容器,再用docker inspect <容器ID>查容器IP对比。
  • 如果是外部服务器/设备IP:找对应设备的管理员,检查上面的服务是不是配置了旧密码;或者看防火墙日志,确认这个IP的请求频率和来源。
  • 如果是容器内部IP:进入容器后用ss -tunlp看进程,有没有其他程序在尝试连库;也可能是你的应用容器配置了旧密码,得检查应用的数据库连接配置文件。

4. 额外检查项

  • 看看有没有定时任务(cron)在执行数据库操作,说不定任务里的密码没更新。
  • 确认重新部署容器时,是不是正确指定了POSTGRES_PASSWORD环境变量,虽然你用psql正常操作,但如果容器启动时初始化的密码和你手动重置的不一致,也可能导致其他服务连不上。

内容的提问来源于stack exchange,提问作者barak.o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:27:28