【发布时间】:2021-10-14 22:53:55
【问题描述】:
我创建了一个 docker-compose.yml 来运行一个 postgresql 数据库。当图像被拉出并且可以成功运行时,我无法通过我拥有的 Spring Boot 项目连接到我的数据库。当我在使用docker-compose up 成功运行我的postgresql 容器后尝试运行我的spring boot 项目时,我收到错误org.postgresql.util.PSQLException: The connection attempt failed. 以及我发现原因所在的大量错误日志文本。
Caused by: java.net.UnknownHostException: postgresqldb
这是我的数据库映像的名称。
我的 docker-compose.yml 在我的 spring 项目的根目录
version: '3.1'
services:
postgresqldb:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
- POSTGRES_DB=booksdb
我的 spring boot 项目中的 application.properties。
server.port=8081
server.servlet.context-path=/rest
#Postgres
spring.datasource.url=jdbc:postgresql://postgresqldb:5432/booksdb
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
#JWT
jwt.secret-key=someKey
感谢您的帮助。
【问题讨论】:
-
Docker 有自己的网络。 Springboot 看不到您的数据库,这就是您遇到 UnknownHostException 的原因。请参阅有关如何执行此操作的示例:stackoverflow.com/questions/60109913/…baeldung.com/spring-boot-postgresql-docker
-
如果应用程序在Docker外部运行,那么主机应该是
localhost; docker-compose.yml 中的ports: - "5432:5432"行确保主机中的端口 5432 连接到 Postgres 容器内的端口 5432。当您决定在 Docker 中运行 Spring Boot 应用程序时,您应该使用postgresqldb作为主机名。
标签: java postgresql spring-boot docker