[英]Spring Boot build-image with Npm installed
我想实现以下目标:将我的 Spring-Boot 应用程序打包到 Dockerimage 中,我可以在其中调用 npx 命令以调用我的应用程序中需要的第 3 方节点库。
我的 Pom 看起来像这样:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-image</goal>
</goals>
</execution>
</executions>
<configuration>
<image>
<name>my-app</name>
<buildpacks>
<buildpack>gcr.io/paketo-buildpacks/nodejs</buildpack>
<buildpack>gcr.io/paketo-buildpacks/java</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>
</plugins>
</build>
现在使用 mvn package 插件将被执行,但首先:它将失败并出现错误:
加载图像“pack.local/builder/ayvwrfbvbm:latest”时收到无效响应
但是,如果我通过打包开始整个事情,则会创建图像
pack build my-app --builder paketobuildpacks/builder:base --buildpack paketo-buildpacks/nodejs --buildpack paketo-buildpacks/java
但是在创建的图像中,我不能调用节点,也不能调用 npm 或 npx,因为似乎这些层没有添加到那里。
如果我随后将 package.json 和 server.js 添加到我的 App-Root 中,似乎添加了 npm-install 层,但我仍然无法从容器中调用 node、npm 或 npx。
请有人可以告诉我一种方法如何创建一个运行 spring-boot 应用程序的图像,然后可以通过调用 3rd 方 npm cli
Runtime.getRuntime().exec("npx my3rdParty-cli");
一些笔记。
当您添加两个构建包时,例如--buildpack paketo-buildpacks/nodejs --buildpack paketo-buildpacks/java
,这并不意味着它们都会运行。 两者都将检查您的代码并确定它们是否可以运行,这就是所谓的检测过程,但最终只会选择您设置的两个 buildpack 组中的一个来构建您的应用程序。
当您在顶部运行构建时,它将打印选择执行的构建包列表,因此您可以准确地看到正在执行的内容。
===> DETECTING 6 of 24 buildpacks participating paketo-buildpacks/ca-certificates 3.2.4 paketo-buildpacks/bellsoft-liberica 9.4.0 paketo-buildpacks/syft 1.13.0 paketo-buildpacks/executable-jar 6.2.4 paketo-buildpacks/dist-zip 5.2.4 paketo-buildpacks/spring-boot 5.13.0 ...
现在,Node.js buildpack 和 Java buildpack 是分开的,所以您可以选择其中一个。 这就是它默认运行 Java 的原因,但如果添加package.json
文件,它会运行 Node.js。 它们彼此独立。
将 Node.js 添加到 Java buildpack 组中存在一个未解决的问题,以便可以支持这样的用例。
如果您尝试在构建时使用 Node.js/NPM,您可以在此处的演示中执行类似操作,您可以使用 Maven 插件安装 Node.js。 如果您可能需要构建一个前端并将其与您的 Java 应用程序捆绑在一起,那么它将可用。
如果您在运行时确实需要 Node.js/NPM,这是一个更棘手的问题。 3.) 不会那样做。 您需要将 Node.js 安装到实际运行时容器中的东西。 得到 2.) 的支持可以做到这一点,但与此同时,有一些可用的选项。 特别是来自该链接的选项 4.)。 您可以使用apt-buildpack安装 Node.js,然后从您的 Java 应用程序中调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.