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
相关产品推荐
相关产品推荐

