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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:11:02