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

无法从Spring Boot连接Docker中运行的PostgreSQL数据库求助

问题:Docker PostgreSQL本地连接密码认证失败

我正在学习Spring Boot,按照线上示例在Docker中搭建PostgreSQL数据库,尝试用本地运行的Spring Boot应用连接。

docker-compose.yaml 配置

services:
  db:
    container_name: postgres_container
    image: postgres
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: jobapp
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - postgres_network
    restart: unless-stopped

  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.org
      PGADMIN_DEFAULT_PASSWORD: root
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
      - pgadmin_data:/var/lib/pgadmin
    ports:
      - "5050:80"
    networks:
      - postgres_network
    restart: unless-stopped

networks:
  postgres_network:
    driver: bridge

volumes:
  postgres_data:
    name: postgres_data
  pgadmin_data:
    name: pgadmin_data

application.properties 配置

spring.datasource.url=jdbc:postgresql://localhost:5432/jobapp
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database=POSTGRESQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

pom.xml 依赖

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

当前现象

  • Docker容器运行正常,能成功连接pgAdmin并看到jobapp数据库
  • 本地执行psql -h localhost -p 5432 -U root -d jobapp提示密码认证失败
  • 通过docker exec -it postgres_container psql -U root -d jobapp能正常连接
  • Spring Boot应用报错:unable to obtain isolated JDBC connection [FATAL: password authentication failed for user "root"]

解决方法

1. 调整PostgreSQL认证策略

PostgreSQL默认对本地连接采用peer认证(匹配操作系统用户),但Docker端口映射后的本地连接会被识别为远程连接,需修改认证规则:

  • 进入容器编辑pg_hba.conf:
    docker exec -it postgres_container vi /var/lib/postgresql/data/pg_hba.conf
    
  • 添加或修改规则,允许root用户从外部通过密码认证访问jobapp库:
    host    jobapp          root            0.0.0.0/0               scram-sha-256
    
  • 重启容器使配置生效:
    docker restart postgres_container
    

2. 清除数据卷缓存(测试环境适用)

若之前启动过容器,数据卷可能保留旧的密码配置,导致新环境变量不生效:

  • 删除数据卷并重新部署:
    docker-compose down -v
    docker-compose up -d
    

注意:此操作会清空数据库所有数据,生产环境请勿执行。

3. 检查端口冲突

本地可能已有PostgreSQL服务占用5432端口,导致连接的是本地数据库而非Docker容器:

  • 检查端口占用:
    # Linux/macOS
    lsof -i :5432
    # Windows
    netstat -ano | findstr :5432
    
  • 若发现本地PostgreSQL进程,停止后重新尝试连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:22:43