为什么“spring-boot:build-image”运行Spring Boot应用程序?

KDW*_*KDW 0 maven buildpack docker spring-boot

两个简单的问题:

  1. 为什么使用命令创建 Docker 镜像时会执行 Spring Boot 应用程序mvnw spring-boot:build-image
  2. 是否有命令行选项可以防止这种情况发生?

我正在为 Spring Boot 应用程序构建 Docker 映像。该应用程序依赖于其他第三方服务,这些服务在映像构建过程中不一定(也不应该)可用。因此,映像构建失败,因为 Spring Boot 应用程序在启动时检查这些第三方依赖项并尝试重新连接,直到它们可用。旁注:后者无法更改,因为它内置在正在使用的第三方服务的框架中。

我也不明白为什么应该实际启动应用程序来构建 Docker 映像。

感谢您的回复以及可能的其他背景信息。

And*_*son 5

我怀疑启动的不是应用程序本身,而是它的测试。

\n

目标与Maven 生命周期的阶段build-image绑定package。为了执行特定阶段中的目标,Maven 必须首先执行前面每个阶段中的每个目标。默认生命周期由以下阶段组成:

\n
    \n
  • validate- 验证项目是否正确并且所有必要的信息均可用
  • \n
  • compile- 编译项目的源代码
  • \n
  • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
  • \n
  • package- 获取编译后的代码并将其打包为其可分发的格式,例如 JAR。
  • \n
  • verify- 对集成测试的结果进行检查,以确保满足质量标准
  • \n
  • install- 将包安装到本地存储库中,以用作本地其他项目的依赖项
  • \n
  • deploy- 在构建环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。
  • \n
\n

正如您所看到的,validatecompiletest全部出现在 之前package

\n

您可以跳过测试 \xe2\x80\x93,但可能会通过使用-DskipTests.

\n