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

JDBC连接Docker部署的PostgreSQL失败:密码错误(SQLState 28P01)求助

PostgreSQL连接报错SQLState 28P01(密码错误)排查方案

1. 清理Docker数据卷缓存

你配置了本地目录作为PostgreSQL的数据卷,第一次启动容器时PostgreSQL会初始化用户和密码并写入卷中。之后即使修改docker-compose.yml里的密码,卷中的旧数据依然保留,导致密码不匹配。

操作步骤:

  • 停止并删除容器:docker-compose down
  • 删除本地数据卷目录:rm -rf ./src/main/resources/volume
  • 重新启动容器:docker-compose up -d

2. 验证配置文件读取是否正确

有可能PropertiesUtil没有正确读取application.properties中的密码,导致传递了错误值给JDBC连接。

在MigrationUtil中临时添加日志,打印读取到的配置值:

public static void migrateDB(){
    Properties properties = PropertiesUtil.getApplicationProperties();
    // 临时打印配置,确认读取是否正确
    System.out.println("读取的用户名: " + properties.getProperty("username"));
    System.out.println("读取的密码: " + properties.getProperty("password"));
    
    try (Connection connection = DriverManager.getConnection(
            properties.getProperty("url"),
            properties.getProperty("username"),
            properties.getProperty("password")))
    {
        System.out.println(connection.getSchema());
    }catch (SQLException e){
        System.out.println(e.getMessage());
    }
}

运行后确认输出的用户名和密码是否与application.properties一致,如果不一致:

  • 检查application.properties是否放在src/main/resources目录下(确保在classpath中)
  • 检查文件名是否拼写正确(比如有没有写成application.properites)
  • 检查文件编码是否为UTF-8,有没有特殊字符混入

3. 添加JDBC URL的SSL禁用参数

新版PostgreSQL默认可能强制要求SSL连接,而本地容器未配置SSL时,连接异常可能被误导为密码错误。

修改application.properties中的URL:

url=jdbc:postgresql://localhost:5432/monitorService?sslmode=disable

4. 验证容器内的用户密码有效性

进入PostgreSQL容器,直接验证用户密码是否正确:

  • 查看容器ID:docker ps
  • 进入容器:docker exec -it <你的容器ID> bash
  • 用指定用户登录数据库:psql -U username -d monitorService
    • 如果能成功登录,说明容器内的用户密码是正确的,问题出在Java代码或配置读取环节
    • 如果登录失败,说明容器初始化时密码未正确设置,需要重新清理数据卷后启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:42:44