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

如何配置JDBC URL实现Spring Boot容器连接Docker数据库容器

解决Spring Boot容器无法连接PostgreSQL容器的问题

针对你遇到的"Connection to localhost:5432 refused"错误,以下是具体的修复步骤:

1. 修正PostgreSQL数据卷挂载路径

你的PostgreSQL容器数据目录配置错误,默认路径是/var/lib/postgresql/data,而非/var/lib/postgres/psql。错误的挂载会导致数据库无法正常初始化,修改docker-compose.yml中postgresql服务的volumes:

volumes:
  - psql:/var/lib/postgresql/data

2. 确保数据源配置正确生效

虽然你在application.yml中指定了jdbc:postgresql://db:5432/postgres,但可能存在配置未加载或被覆盖的情况:

  • 优先用Docker Compose环境变量强制覆盖配置,在app_service中添加:
    environment:
      - SPRING_DATASOURCE_HIKARI_JDBC_URL=jdbc:postgresql://postgresql:5432/postgres
      - SPRING_DATASOURCE_HIKARI_PASSWORD=Access/fedora/6
    
    这里用服务名postgresql作为主机名(Docker Compose网络中服务名可直接解析),比容器名更可靠。
  • 检查Dockerfile是否正确复制了配置文件,确保src/main/resources/application.yml被打包到镜像中:
    COPY src/main/resources/application.yml /app/application.yml
    

3. 等待PostgreSQL服务就绪

depends_on仅保证容器启动顺序,不代表数据库服务可用。添加健康检查让Spring Boot等待数据库就绪:

修改postgresql服务:

postgresql:
  image: postgres:15.0
  container_name: db
  ports:
    - "5432:5432"
  restart: unless-stopped
  environment:
    POSTGRES_PASSWORD: "Access/fedora/6" # 特殊字符用引号包裹避免解析错误
    POSTGRES_DB: postgres
  volumes:
    - psql:/var/lib/postgresql/data
  networks:
    - net
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
    interval: 5s
    timeout: 5s
    retries: 5

修改app_service的depends_on:

app_service:
  container_name: app_service
  build: .
  ports:
    - "8080:8080"
  depends_on:
    postgresql:
      condition: service_healthy # 等待数据库健康检查通过后启动
  networks:
    - net

4. 排查连通性与日志

  • 进入Spring Boot容器,测试能否访问PostgreSQL服务:
    docker exec -it app_service ping postgresql
    
  • 查看PostgreSQL容器日志,确认数据库是否正常启动:
    docker logs db
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:10:27