Docker部署PostgreSQL无法连接Spring Boot项目问题排查
问题分析与修复方案
你的配置存在两个关键错误,导致Spring Boot无法连接PostgreSQL,甚至引发容器异常:
1. Docker Compose端口映射错误
PostgreSQL容器默认监听5432端口,但你的配置把宿主机8081端口映射到了容器的8081端口——容器内根本没有服务在8081端口运行,这直接导致Spring无法连接到数据库服务。
修正后的Docker Compose配置:
services: postgres: container_name: newlife image: postgres environment: POSTGRES_USER: local POSTGRES_PASSWORD: local PGDATA: /data/postgres # 新增:指定初始化的数据库名,与Spring配置中的online对应 POSTGRES_DB: online volumes: - postgres:/data/postgres ports: # 宿主机8081端口映射到容器默认的5432端口 - "8081:5432" networks: - postgres restart: unless-stopped networks: postgres: driver: bridge volumes: postgres:
2. Spring Boot数据库连接URL的数据库名不匹配
你的Spring配置里指定连接online数据库,但默认情况下PostgreSQL容器只会创建一个与POSTGRES_USER同名的数据库(即local),不会自动生成online库。解决方式二选一:
- 按上面的Docker Compose配置添加
POSTGRES_DB=online环境变量,自动初始化目标数据库 - 或者修改Spring配置中的数据库URL为:
spring: datasource: url: jdbc:postgresql://localhost:8081/local
额外操作建议
如果之前已经启动过容器,建议先清理旧容器和数据卷,避免旧数据干扰:
docker-compose down -v
再重新启动容器:
docker-compose up -d
内容的提问来源于stack exchange,提问作者Banta Solagratia
相关产品推荐
相关产品推荐

