【问题标题】:unable to connect to running postgresql container from local spring boot project无法从本地 Spring Boot 项目连接到正在运行的 postgresql 容器
【发布时间】: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


【解决方案1】:

也许你应该给容器添加一个主机名:

version: '3.1'
services:
  postgresqldb:
    image: postgres
    hostname: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=booksdb

docker 使用自己的网络并在内部解析主机名。您应该为正在运行的容器分配一个主机名,该主机名可能会在其余容器中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2020-11-06
    • 2018-06-23
    • 2019-09-09
    • 1970-01-01
    • 2021-06-17
    • 2019-11-25
    • 2022-11-06
    相关资源
    最近更新 更多