我有一个Maven多模块项目(Angular前端模块+ SpringBoot后端模块)驻留在同一父Maven项目下。我想在Docker Multi-containers中运行应用程序(前端的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"]
我跑步时:
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
答案 0 :(得分:0)
这应该有效。我没有要测试的环境,因此,如果您遇到错误,请告诉我,我会予以解决。
将此Docker文件放置在项目的根目录(与docker-compose相同的级别)。
Dockerfile:
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旁边还应该有一个忽略文件。
.dockerignore
application-frontend/
您应按如下所示更改docker-compose文件:
...
docker-container-application-backend:
image: docker-image-application-backend
build:
context: ./
dockerfile: Dockerfile
...
声明dockerfile: Dockerfile
是多余的,可以删除。