【问题标题】:Docker + Spring Boot + Postgres-org.postgresql.util.PSQLException: The connection attempt failedDocker + Spring Boot + Postgres-org.postgresql.util.PSQLException:连接尝试失败
【发布时间】:2020-08-21 01:41:33
【问题描述】:

我有一个与 Postgres 数据库配合使用的 Java Spring Boot 应用程序。我想对它们都使用 Docker。最初,我创建了一个 docker-compose.yml 文件,如下所示:

version: '3.2'
services:
  postgres:
    restart: always
    container_name: sample_db
    image: postgres:10.4
    ports:
      - '5432:5432'
    environment:
         - POSTGRES_PASSWORD=root
         - POSTGRES_USER=root
         - POSTGRES_DB=test
# APP**
  web:
    build: .
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/test
    expose:
      - 8080
    ports:
      - 8080:8080

然后,在 application.properties 文件中,我定义了以下属性。

server.port=8080
spring.jpa.generate-ddl=true
spring.datasource.url=jdbc:postgresql://db:5432/test
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.flyway.baseline-on-migrate=true
spring.flyway.enabled=false
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto = none
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: true

另外,我在我的项目目录中创建了一个 Dockerfile,如下所示:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8080
RUN mkdir -p /app/
RUN mkdir -p /app/logs/
ADD target/household-0.0.1-SNAPSHOT.jar /app/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=container", "-jar", "/app/app.jar"]

我发出了这些命令,结果出现如下错误。

**mvn clean package
docker build ./ -t springbootapp  
docker-compose up**

问题在于连接字符串。我相信我必须将其更改为其他内容,但我不知道应该是什么。我收到以下错误消息:

web_1       | org.postgresql.util.PSQLException: The connection attempt failed.
web_1       |   at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292) ~[postgresql-42.2.8.jar!/:42.2.8]
web_1       |   at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.8.jar!/:42.2.8]
web_1       |   at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.8.jar!/:42.2.8]
web_1       |   at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.8.jar!/:42.2.8]
web_1       |   at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.8.jar!/:42.2.8]
web_1       |   at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.2.jar!/:na]
web_1       |   at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354) ~[HikariCP-3.4.2.jar!/:na]
web_1       |   at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) ~[HikariCP-3.4.2.jar!/:na]
web_1       |   at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473) [HikariCP-3.4.2.jar!/:na]
web_1       |   at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554) [HikariCP-3.4.2.jar!/:na]
web_1       |   at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) [HikariCP-3.4.2.jar!/:na]
web_1       |   at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) [HikariCP-3.4.2.jar!/:na]
web_1       |   at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
web_1       |   at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) [hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]

该应用程序在本地运行良好,但在对其进行 docker 化时遇到问题。如果有任何问题,请告诉我。

【问题讨论】:

    标签: java spring postgresql spring-boot docker


    【解决方案1】:

    在 docker-compose.yml 中,您的 postgres 服务称为“postgres”

      services:
        postgres:
    

    所以你的 jdbc 连接字符串中的主机名也应该是“postgres”,而不是“db”

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

    【讨论】:

    • 。谢谢。现在工作正常。我收到以下错误。错误:对于家用电器_web_1 无法启动服务 web:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”java\”:$PATH 中找不到可执行文件”:未知错误:对于 web 不能启动服务网络:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”java\”:$PATH 中找不到可执行文件”:未知错误:启动项目时遇到错误。跨度>
    猜你喜欢
    • 2013-03-26
    • 2021-05-25
    • 2022-08-19
    • 2020-09-18
    • 2023-01-08
    • 1970-01-01
    • 2023-01-11
    • 2015-02-19
    相关资源
    最近更新 更多