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

无Docker Compose时,如何连接Docker中的Spring Boot与PostgreSQL?

解决Docker容器中Spring Boot连接PostgreSQL被拒绝的问题

问题场景

学习Docker时搭建了一个支持用户增查改的Spring Boot小应用,PostgreSQL容器运行在5432端口,应用容器运行在8081端口,但启动后出现连接拒绝错误:

org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

启动容器的命令:

docker run --name postgres --network demo-network -p 5432:5432 -e POSTGRES_PASSWORD=admin -d postgres
docker run --network demo-network -p 8081:8081 -d myuser/demodocker

当前Spring Boot的application.properties配置:

server.port=8081
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=admin
spring.jpa.hibernate.ddl-auto=drop-and-create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
javax.persistence.schema-generation.scripts.action=drop-and-create

解决步骤

1. 修改数据库连接URL

将application.properties里的数据库URL中的localhost替换为PostgreSQL容器的名称postgres——同一Docker网络内,Docker会自动通过容器名完成DNS解析:

spring.datasource.url=jdbc:postgresql://postgres:5432/postgres

2. 重新构建并启动Spring Boot容器

如果配置是打包在镜像内的,先重新构建镜像:

docker build -t myuser/demodocker .

然后重启容器:

docker stop myuser/demodocker
docker rm myuser/demodocker
docker run --network demo-network -p 8081:8081 -d myuser/demodocker

原理说明

Docker容器内部的localhost指向容器自身的网络栈,而非宿主机。由于两个容器已加入同一demo-network,直接使用PostgreSQL容器的名称即可访问服务,Docker内置DNS会把容器名解析为对应容器的IP地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:35:01