首页 > 解决方案 > 由于没有可用的 Postgresql 实例,Spring Boot 和 Postgresql 应用程序在 docker 中构建失败

问题描述

我有一个想在 docker 环境中构建和运行的 Spring Boot 应用程序。

我的 docker 文件如下所示:

FROM maven:3.6.0-jdk-11-slim AS Build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package -Pdocker

#
# Package stage
#
FROM openjdk:11-jre-slim
COPY --from=Build /home/app/target/academy*.jar /usr/local/lib/academy.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar","/usr/local/lib/academy.jar"]

我的 docker-compose 文件如下所示:

version: "3"
services:
  postgres:
    image: postgres:13
    network_mode: bridge
    container_name: postgres
    volumes:
      - postgres-data:/var/lib/postgresql/data
    expose:
    - 5432
    ports:
      - 5432:5432
    environment:
         - POSTGRES_PASSWORD=docker
         - POSTGRES_USER=docker
         - POSTGRES_DB=academy
    restart: unless-stopped
# This is my rest api app*****************************************
  academy:
    build:
      context: ../IdeaProjects/academy
    image: academy:1.0
    network_mode: bridge
    container_name: academy
    depends_on:
      - postgres
    expose:
      - 8081
    ports:
      - 8081:8081
    volumes:
          - /home/pramod/Desktop:/var/tmp
    restart: unless-stopped
volumes:
  postgres-data:

当我运行 docker-compose build 时,它失败并出现错误

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    ... 17 common frames omitted

是否有可能在为 spring 应用程序构建映像之前启动 postgresql 数据库?

标签: dockerdocker-compose

解决方案


推荐阅读