Docker Compose中Spring容器无法连接PostgreSQL容器求助
Spring-PostgreSQL Docker Compose 连接拒绝问题排查方案
1. 验证PostgreSQL健康检查是否生效
depends_on的健康检查如果配置不当,Spring容器仍会在PostgreSQL未完全就绪时启动。确保你的docker-compose.yml中PostgreSQL服务的健康检查配置正确:
services: postgres: image: postgres:15-alpine healthcheck: test: ["CMD-SHELL", "pg_isready -U 你的数据库用户名 -d 你的数据库名"] interval: 5s timeout: 5s retries: 5 volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql
2. 确认容器网络一致性
确保Spring应用和PostgreSQL服务处于同一Docker网络(默认Compose会创建默认网络,若手动指定网络需同步配置):
networks: app-network: driver: bridge services: postgres: networks: - app-network spring-app: networks: - app-network
3. 核对Spring数据库配置
确认application.yml中数据库主机名严格对应Compose里的PostgreSQL服务名,端口为容器内部默认的5432:
spring: datasource: url: jdbc:postgresql://postgres:5432/你的数据库名 username: 你的数据库用户名 password: 你的数据库密码 driver-class-name: org.postgresql.Driver
4. 重置PostgreSQL数据卷
init.sql仅在PostgreSQL首次初始化(数据卷为空)时执行,若之前已有数据卷,脚本不会重复运行。删除数据卷后重新启动:
docker-compose down -v docker-compose up
5. 适配M1 Mac架构
确保使用支持arm64架构的PostgreSQL镜像,比如postgres:15-alpine,避免使用仅兼容amd64的镜像导致启动异常。
6. 检查Spring镜像构建配置
确认Dockerfile正确打包了application.yml,示例Dockerfile:
FROM openjdk:17-jdk-alpine COPY target/你的应用jar包名.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
7. 查看详细错误日志
通过Spring容器日志定位具体错误原因:
docker-compose logs spring-app
内容的提问来源于stack exchange,提问作者ForkBench
相关产品推荐
相关产品推荐

