【问题标题】:Installing maven depencies from pom.xml in docker在 docker 中从 pom.xml 安装 maven 依赖项
【发布时间】:2021-11-16 13:13:23
【问题描述】:

我正在尝试在 docker 环境中运行 spring-boot maven 项目。所以设置如下:

  1. Docker 已设置并安装 Java 等(仅完成一次)
  2. 应用程序正在运行(可以运行任意次数)

我正在经历什么

每次我通过mvn spring-boot:run 运行spring-boot 项目时,它都会从pom.xml(Java、Maven 等)安装所有必需的库(每次我运行项目时)。是从 docker 预安装的),然后运行项目。

我想做什么

这个每次都重新安装的过程是多余且耗时的,所以我想委派这个安装的东西给docker。理想情况下,使用pom.xml 进行安装,但也欢迎使用其他方式。

到目前为止我已经尝试过什么

  • 安装npmusing a good tutorial,但它在Docker中失败,因为在docker build期间我们无法重新启动终端,而source ~/.bash_profile似乎也不起作用。
  • 尝试直接在 docker 中构建该项目(通过RUN mvn clean install --fail-never)并将npm 和node 文件夹复制到我运行应用程序的目录中。但它似乎也不起作用,因为它每次都安装它们而没有任何改变。

有人可以帮我吗?这个问题卡住了项目。非常感谢!

【问题讨论】:

  • 我不明白你为什么要通过 maven 运行你的 spring-boot 项目。为什么不打包战争或可执行 jar 并运行它?
  • 有一个official guide about Spring Boot with Docker。你试过吗?顺便说一句,为什么node/npm?这显然与 Java / Spring Boot 无关……
  • 这不是 Maven 的工作方式。
  • 我建议在 docker 之外构建您的应用程序,并且只将生成的应用程序(spring-boot app jar)放入 docker...这将使用您的本地缓存,从而阻止每次下载。您可以在 docker 中执行相同的操作,但您必须构建一次并将本地缓存保存为卷或容器。您也可以将本地缓存从外部装入。码头集装箱......

标签: java spring-boot docker maven


【解决方案1】:

根据您的问题,我了解到,在 Dockerfile 中,您只需安装 java、maven 等,但在执行 mvn spring-boot:run 之前不使用 mvn clean package install 构建您的项目(这也是多余的,因为 mvn spring-boot:run 没有在启动应用程序之前为您构建)。

在容器上运行时,您不能跳过安装 maven 依赖项,因为它们在运行时会旋转。因此它会在您调用mvn clean install 或mvn spring-boot:run 时安装。

您最多可以做的是,使用您的 devops 管道,预先构建 jar,然后在 Dockerfile 中复制构建 jar 并执行。

本例中的示例 Dockerfile:

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

这里之前的构建工件已经在target/提供

【讨论】:

  • 这个mvn clean package install 将重复几个步骤,这不是一个好主意...您只需要mvn clean install 并将生成的文件(app.jar)放入您不需要的docker容器中只做install mvn clean package 就足够了...
  • 没错.. mvn package 在容器上完成就足够了,但如果在其他虚拟机上的管道上完成 mvn install 就可以了。
  • install 通常在管道中也不需要。一个包将在目标目录中创建所需的 jar 文件,可以将其复制到 docker 映像中......在 CI 等管道中,您应该使用 mvn deploy 并将工件部署到存储库管理器中......
猜你喜欢
  • 2014-02-19
  • 1970-01-01
  • 2020-12-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多