本地Spring Boot项目无法连接Docker运行的PostgreSQL容器问题求助
问题根因
UnknownHostException: postgresqldb 报错的核心原因是:postgresqldb 是Docker Compose内部网络的服务域名,仅对同一个Docker Compose网络内的其他容器可解析,你本地直接运行的Spring Boot项目不在Docker网络中,无法识别这个主机名,所以解析失败。
解决方案
根据你的运行场景选择对应方案即可:
- 场景1:Spring Boot项目直接在本地IDE/命令行运行
修改application.properties中的数据库连接地址,将主机名替换为localhost即可,你已经在docker-compose中配置了5432端口的端口映射,本地端口的流量会自动转发到PostgreSQL容器中:
spring.datasource.url=jdbc:postgresql://localhost:5432/booksdb
- 场景2:后续要将Spring Boot也打包为容器和PostgreSQL一起部署
只需要在你的docker-compose.yml中添加Spring Boot服务的配置,两个服务同属一个Docker Compose网络时,就可以通过postgresqldb服务名互相访问,示例配置参考:
version: '3.1' services: postgresqldb: image: postgres ports: - "5432:5432" environment: - POSTGRES_PASSWORD=postgres - POSTGRES_USER=postgres - POSTGRES_DB=booksdb # 新增Spring Boot服务配置 spring-boot-app: build: . # 这里指向你的Spring Boot项目Dockerfile所在路径 ports: - "8081:8081" depends_on: - postgresqldb # 保证PostgreSQL先启动 environment: SPRING_DATASOURCE_URL: jdbc:postgresql://postgresqldb:5432/booksdb
验证步骤
修改完配置后,可以先用本地数据库管理工具(比如DBeaver、Navicat)或者psql命令尝试连接localhost:5432的booksdb库,确认容器端口映射正常后再启动Spring Boot项目即可。
内容的提问来源于stack exchange,提问作者vasilis 123
相关产品推荐
相关产品推荐

