Maven多模块Spring Boot项目的Docker容器,带角度前端模块

Maven多模块Spring Boot项目的Docker容器,带角度前端模块,maven,docker,docker-compose,multi-module,docker-maven-plugin,Maven,Docker,Docker Compose,Multi Module,Docker Maven Plugin,我有Maven多模块项目(Angular前端模块+SpringBoot后端模块)位于同一父Maven项目下。我想在Docker多容器中运行应用程序(前端的Docker容器+后端的Docker容器+数据库的Docker容器)。如何使用Docker Compose运行Docker多容器 我在父项目中创建了“docker compose.yml”,并在每个模块中添加了“Dockerfile”。 这是我的项目结构 docker-compose.yml文件 version: '3' services:

我有Maven多模块项目(Angular前端模块+SpringBoot后端模块)位于同一父Maven项目下。我想在Docker多容器中运行应用程序(前端的Docker容器+后端的Docker容器+数据库的Docker容器)。如何使用Docker Compose运行Docker多容器

我在父项目中创建了“docker compose.yml”,并在每个模块中添加了“Dockerfile”。
这是我的项目结构

docker-compose.yml文件

version: '3'

services:
  docker-container-application-mariadb:
    image: mariadb:latest
    environment:
      - MYSQL_ROOT_PASSWORD=*****
      - MYSQL_DATABASE=*******
      - MYSQL_USER=*******
      - MYSQL_PASSWORD=*******
    volumes:
      - /data/application-mariadb
  docker-container-application-backend:
    image: docker-image-application-backend
    build:
      context: ./application-backend
      dockerfile: Dockerfile
    depends_on:
      - docker-container-application-mariadb
    ports:
      - 8087:8080
    volumes:
      - /data/application-backend
后端Dockerfile:

FROM openjdk:8
EXPOSE 8080
ADD target/application_backend.jar application_backend.jar
# Run the jar file
ENTRYPOINT ["java", "-jar", "application_backend.jar"]
ENTRYPOINT ["java", "-jar", "application_backend.jar"]
FROM maven:3.6.0-jdk-8-alpine as build

WORKDIR /app

COPY . .

WORKDIR /app/application-backend

RUN mvn clean package -DskipTests=true

FROM openjdk:8

WORKDIR /app

COPY --from=build /app/application-backend/target/*.jar ./

EXPOSE 8080

# Run the jar file
ENTRYPOINT ["java", "-jar", "/app/application_backend.jar"]
当我跑步时:

docker-compose up
以下是我得到的错误:

Step 4/6 : ADD $PWD/application-backend/target/application_backend.jar application_backend.jar
ERROR: Service 'docker-container-application-backend' failed to build: ADD failed: stat /var/lib/docker/tmp/docker-builder971325573/esysync-backend/target/application_backend.jar: no such file or directory
代码更新后出错:

@Milah建议的代码更新后出错:

这应该行得通。我没有要测试的环境,所以如果您出现错误,请告诉我,我会修复它们

将此Docker文件放置在项目的根目录下(与Docker compose的级别相同)

Dockerfile:

FROM openjdk:8
EXPOSE 8080
ADD target/application_backend.jar application_backend.jar
# Run the jar file
ENTRYPOINT ["java", "-jar", "application_backend.jar"]
ENTRYPOINT ["java", "-jar", "application_backend.jar"]
FROM maven:3.6.0-jdk-8-alpine as build

WORKDIR /app

COPY . .

WORKDIR /app/application-backend

RUN mvn clean package -DskipTests=true

FROM openjdk:8

WORKDIR /app

COPY --from=build /app/application-backend/target/*.jar ./

EXPOSE 8080

# Run the jar file
ENTRYPOINT ["java", "-jar", "/app/application_backend.jar"]
Dockerfile旁边还应该有一个ignore文件

dockerignore先生

application-frontend/
您应按如下方式更改docker compose文件:

...
  docker-container-application-backend:
    image: docker-image-application-backend
    build:
      context: ./
      dockerfile: Dockerfile
...

声明
dockerfile:dockerfile
是多余的,可以删除。

非常感谢您的快速回答。我测试了你的代码,但是出现了以下错误,请查看我问题的更新。请提醒一下,我有一个maven项目。所以父项目包含两个模块:前端和后端。每个模块中的docker文件和docker在父项目中组成My bad,我在根文件夹中没有看到父pom。。。在不改变项目结构的情况下,很难让它正常工作。您真的需要父pom.xml吗?与此同时,我正在想办法解决它。@TigrisLaesus我更新了帖子,我认为这应该行得通。向你的努力致以我最诚挚的问候。。我仍然没有测试您发送给我的内容…但在执行代码之前,我有一个问题,事实上,正如我所提到的,我还有另一个模块:前端,它以后必须在一个单独的docker容器中运行,因此这个模块也有它自己的Dockerfile,根据您的说法,我应该将后端的Dockerfile放在根级别(与父级相同),那么前端模块Dockerfile呢?您得到的错误完全相同,这真的很奇怪。您确定正在运行更新的版本吗?在运行maven构建之前,您可以添加以下内容“RUN pwd&&ls-lart”-这应该在日志中打印它尝试运行构建的当前位置和该文件夹的内容。如果你。可以在github或类似平台上使用你的结构,也许我可以直接在那里修复它…请记住,解决方案还取决于pom文件的结构,目前我只是猜测。我无论如何,同样的错误真的很奇怪。