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

Spring Docker容器无法访问Postgres Docker容器问题求助

问题解决:Spring Docker容器无法访问Postgres Docker容器

嘿,我一眼就看出问题所在了——你Spring配置里的数据库连接地址用了localhost,这在Docker容器环境里根本行不通!

核心原因

在Docker容器内部,localhost指的是容器自身的网络栈,而不是你的宿主机或者Postgres容器。虽然你在docker-compose里把Postgres的5432端口映射到了宿主机,但Spring容器是在自己的隔离环境里,没法通过localhost:5432访问到Postgres容器。

快速修复方案

修改你的application.yml里的数据库URL,把localhost换成docker-compose配置中Postgres服务的名称db(Docker Compose会自动为同一网络下的服务创建DNS解析,用服务名就能直接访问对应容器):

spring:
  datasource:
    url: jdbc:postgresql://db:5432/media  # 这里把localhost改成db
    username: postgres
    password: postgres
  hikari:
    connectionTimeout: 30000

进阶优化:确保Postgres完全就绪后再启动Spring

虽然你用了depends_on,但它只保证容器的启动顺序,不确保Postgres服务已经完全就绪可以接受连接。如果后续还是偶尔出现连接问题,可以给Postgres服务加上健康检查,让Spring等Postgres真正就绪后再启动:

更新你的docker-compose.yml:

version: '3'
services:
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: media
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d media"]
      interval: 5s
      timeout: 5s
      retries: 5
  app:
    build:
      context: ./
      dockerfile: Dockerfile
    depends_on:
      db:
        condition: service_healthy  # 等待db服务健康检查通过
    ports:
      - "8080:8080"

这样修改后,重新执行docker-compose up --build,Spring应用就能正常连接到Postgres容器了。

内容的提问来源于stack exchange,提问作者senjin.hajrulahovic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:40:30