Docker容器连接故障:Spring API无法连接PostgreSQL容器
问题解决:Spring API容器无法连接PostgreSQL容器
核心问题:数据库连接地址错误
在容器环境中,localhost指向容器自身而非主机或其他容器。你的Spring应用容器尝试连接localhost:5332,但这个地址在容器内部无法访问到PostgreSQL容器。
解决步骤:
- 修改
application.yml中的数据库连接URL:
将原来的:
url: jdbc:postgresql://localhost:5332/statistics
替换为:
url: jdbc:postgresql://postgres:5432/statistics
postgres是docker-compose中定义的PostgreSQL服务名称,Docker会自动在自定义网络api-postgres中解析这个名称到对应的容器IP5432是PostgreSQL容器内部的端口,而非映射到主机的5332
- 优化容器启动顺序(可选但推荐)
虽然你已经配置了depends_on,但默认它只等待PostgreSQL容器启动,不会等待数据库服务完全就绪。修改docker-compose中restapi服务的depends_on配置,确保API在PostgreSQL健康检查通过后再启动:
depends_on: postgres: condition: service_healthy
其他验证点:
- 确认
spring.datasource.username和spring.datasource.password与docker-compose中PostgreSQL的POSTGRES_USER、POSTGRES_PASSWORD完全一致(当前配置是匹配的) - 检查自定义网络
api-postgres是否正常生效:两个服务都已加入该网络,Docker会自动处理容器间的通信
修改后重新执行docker-compose up --build即可尝试连接。
内容的提问来源于stack exchange,提问作者Dusan Bjelica
相关产品推荐
相关产品推荐

