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

本地SpringBoot及终端无法连接PostgreSQL Docker容器,求解决方案

问题:PgAdmin可连接Docker PostgreSQL,但SpringBoot与终端无法连接

我能通过PgAdmin4使用docker-compose中指定的凭据正常连接数据库,但SpringBoot应用和终端都无法连接。

我的配置文件

Application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/customer
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
server.error.include-message=always
server.port=8082

Docker-compose.yml

services:
  postgres:
    container_name: postgres
    image: postgres:alpine3.17
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
      PGDATA: /data/postgres
    volumes:
      - ./data/postgres:/data/postgres
    ports:
      - "5432:5432"
    networks:
      - postgres
    restart: unless-stopped

  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: xxxx78@gmail.com
      PGADMIN_DEFAULT_PASSWORD: password
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
      - ./data/pgadmin:/var/lib/pgadmin
    ports:
      - "5050:80"
    networks:
      - postgres
    restart: unless-stopped

networks:
  postgres:
    driver: bridge

我已经看了很多YouTube视频,甚至尝试把properties配置换成yml格式,都没用。

错误信息

  • SpringBoot启动时错误:连接被拒绝,无法访问localhost:5432的PostgreSQL服务
  • 终端连接时错误:无法连接到服务器,连接被拒绝,提示确认服务器是否在localhost的5432端口监听

解决方案

1. 检查PostgreSQL容器状态

先确认postgres容器是否正常运行,执行命令:

docker ps

如果容器未运行,启动容器:

docker-compose up -d postgres

2. 排查端口冲突

确认本地5432端口未被其他程序占用:

# Linux/macOS
lsof -i :5432
# Windows
netstat -ano | findstr :5432

若端口被占用,要么停止占用程序,要么修改docker-compose的端口映射(比如改成5433:5432),同时同步更新SpringBoot的spring.datasource.url为jdbc:postgresql://localhost:5433/customer

3. 确认目标数据库存在

Postgres默认只会创建与POSTGRES_USER同名的数据库(这里是root),PgAdmin能连接不代表customer数据库已存在:

  • 方案一:通过PgAdmin连接后手动创建customer数据库
  • 方案二:在docker-compose的postgres服务中添加环境变量,让容器启动时自动创建数据库:
    postgres:
      environment:
        # 保留原有变量,新增以下行
        POSTGRES_DB: customer
    

修改后重启容器:docker-compose down && docker-compose up -d

4. 网络配置修正(若SpringBoot也在Docker中)

如果你的SpringBoot应用同样运行在Docker容器内,不能用localhost作为数据库主机名,需改用docker-compose中postgres服务的名称postgres,即:

spring.datasource.url=jdbc:postgresql://postgres:5432/customer

5. 修正终端连接命令

终端连接时,确保命令指定正确的用户名和数据库:

psql -h localhost -U root -d customer

若之前修改过端口,需加上端口参数:

psql -h localhost -p 5432 -U root -d customer

执行后输入密码password即可尝试连接。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:37