【问题标题】:Docker Spring Boot Postgres Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connectionsDocker Spring Boot Postgres 检查主机名和端口是否正确以及 postmaster 是否接受 TCP/IP 连接
【发布时间】:2020-08-09 07:07:37
【问题描述】:

这是我第一次尝试将我的 Springboot 应用程序放入一个 docker 容器中,并将我的 PostgresDB 放入另一个容器中。

application.properties:

spring.datasource.url=jdbc:postgresql://localhost:5432/esteticcenter
spring.datasource.username=postgres
spring.datasource.password=admin

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto = update

dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8082
RUN mkdir -p /app/
RUN mkdir -p /app/logs/
ADD target/postgres-demo-0.0.1-SNAPSHOT.jar /app/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]

docker-compose.yml:

version: "3"
services:
  postgres:
    image: postgres:latest
    network_mode: bridge
    container_name: postgres
    volumes:
      - postgres-data:/var/lib/postgresql/data
    expose:
      - 5432
    ports:
      - 5432:5432
    environment:
      - POSTGRES_PASSWORD=admin
      - POSTGRES_USER=postgres
      - POSTGRES_DB=esteticcenter
    restart: unless-stopped
  # APP*****************************************
  springbootapp:
    image: springbootapp:latest
    network_mode: bridge
    container_name: springbootapp
    expose:
      - 8080
    ports:
      - 8080:8080
    restart: unless-stopped
    depends_on:
      - postgres
    links:
      - postgres
volumes:
  postgres-data:

错误:org.postgresql.util.PSQLException:连接到 localhost:5432 被拒绝。检查主机名和端口是否正确,以及 postmaster 是否接受 TCP/IP 连接。

我尝试用 dbpostgresql 或 db 替换“localhost”,但在 spring.datasource.url 中,我检查了许多答案,但随后“mvn clean package”失败,我无法创建 jar。我在这里错过了什么?

【问题讨论】:

    标签: postgresql spring-boot docker docker-compose


    【解决方案1】:

    Docker compose 将为您的服务创建一个带有 DNS 的专用网络。每个服务将获取服务名称作为主机名(在 docker-compose.yml 中定义)。 其他容器可以通过其服务名称从该网络内部访问。

    application.properties 文件中更改数据库的主机名应该可以解决问题:

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

    【讨论】:

    • 我的 mvn clean 包然后失败,我无法创建 jar。请阅读最后一句话。
    • 您是否使用相同的属性文件运行测试?如果是这样,您应该为部署(或测试)创建单独的配置。或者您可以保留默认属性,并在 docker-compose.yml 文件中将其作为环境变量覆盖(就像用户和密码属性一样)
    • 你好@Pieterjan。当另一个用户运行我的 docker 映像时,它会给出此错误“o.h.engine.jdbc.spi.SqlExceptionHelper:与 localhost:5432 的连接被拒绝。检查主机名和端口是否正确以及 postmaster 是否接受 TCP/IP 连接。”你能帮帮我吗?
    • 这个用户是否也在运行 PostgreSQL?始终使用适当的主机名配置数据源 URL。如果您在本地运行,则可以是“localhost”。如果您在 Docker compose 中运行,这将是数据库服务的名称,例如'后进'。如果数据库在不同的主机(服务器/计算机)上运行,则需要使用此设备的主机名或 IP 地址。
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2018-01-20
    • 2018-12-17
    • 2021-04-03
    相关资源
    最近更新 更多