使用 dockerfile 创建带有多模块 spring 应用程序的 maven 构建

问题描述

我在使用 Dockerfile 构建应用程序时遇到问题
我使用了简单的 dockerfiles ,只是使用 jdk 来启动它,然后我使用控制台命令构建项目,它运行良好。

但是,如果我尝试在 dockerfile 中使用 maven 构建它会失败,而且我不知道如何在 maven 之外构建应用程序。

如何准备 Dockerfile?

这是应用程序的结构:

create-credit(Parent) 
|
|-------> credit(Child) - port 8089 credit app
|
|-------> client(Child) - port 8090 - client app
|
|-------> product(Child) - port 8091 - product app

我使用 docker-compose 运行它,为应用程序创建一个数据库

mvn clean install -Dmaven.test.skip=true

docker-compose up

这里是 Dockerfile:

credit.Dockerfile:

FROM adoptopenjdk/openjdk8:ubi
ADD credit/target/credit-ChocoladeIcecream.jar .
CMD java -jar credit/credit-ChocoladeIcecream.jar

client.Dockerfile:

FROM adoptopenjdk/openjdk8:ubi
ADD client/target/client-ChocoladeIcecream.jar .
CMD java -jar client/client-ChocoladeIcecream.jar

product.Dockerfile:

FROM adoptopenjdk/openjdk8:ubi
ADD product/target/product-ChocoladeIcecream.jar .
CMD java -jar product/product-ChocoladeIcecream.jar

和 docker-compose.yml 文件

    version: '3.9'

services:

  credit_app:
    image: 'credit:latest'
    build:
      context: ./
      dockerfile: credit.Dockerfile
    container_name: credit
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
      - SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
      - SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      - CREDIT_PORT=${PORT1}
      - CLIENT_PORT=${PORT2}
      - PRODUCT_PORT=${PORT3}
    ports:
      - ${PORT1}:${PORT1}


  client_app:
    image: 'client:latest'
    build:
      context: ./
      dockerfile: client.Dockerfile
    container_name: client
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
      - SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
      - SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      - CREDIT_PORT=${PORT1}
      - CLIENT_PORT=${PORT2}
    ports:
      - ${PORT2}:${PORT2}


  product_app:
    image: 'product:latest'
    build:
      context: ./
      dockerfile: product.Dockerfile
    container_name: product
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
      - SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
      - SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      - PRODUCT_PORT=${PORT3}
      - CREDIT_PORT=${PORT1}
    ports:
      - ${PORT3}:${PORT3}

  db:

    image: 'postgres:13.1-alpine'
    container_name: db
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...