首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装了Npm的Spring Boot build映像

安装了Npm的Spring Boot build映像
EN

Stack Overflow用户
提问于 2022-07-20 08:44:09
回答 1查看 221关注 0票数 0

我想实现以下目标:将我的Spring应用程序打包到一个Dockerimage中,在这里我可以调用npx命令,以便调用我的应用程序中需要的第三方节点库。

我的兄弟看起来是这样的:

代码语言:javascript
复制
<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包,插件将被执行,但首先:它将失败,错误:

加载图像时收到的无效响应"pack.local/builder/ayvwrfbvbm:latest“

但是,如果我通过打包启动整个过程,则会创建图像

代码语言:javascript
复制
pack build my-app --builder paketobuildpacks/builder:base --buildpack paketo-buildpacks/nodejs --buildpack paketo-buildpacks/java

但是在创建的映像中,我不能调用节点,也不能调用npm或npx,因为似乎没有添加这些层。

如果我然后添加了一个package.json和一个server.js到我的应用程序-根,它似乎是添加了npm -安装层,但我仍然不能从我的容器中调用节点、npm或npx。

请有人告诉我如何创建一个运行spring引导应用程序的映像,然后通过

代码语言:javascript
复制
Runtime.getRuntime().exec("npx my3rdParty-cli");
EN

回答 1

Stack Overflow用户

发布于 2022-07-20 15:40:23

几个音符。

  1. 当您添加两个像--buildpack paketo-buildpacks/nodejs --buildpack paketo-buildpacks/java这样的内置包时,并不意味着它们都会运行。两种方法都将检查您的代码并确定它们是否可以运行,这就是所谓的检测过程,但最终只有您设置的两个buildpack组中的一个将被选中来构建您的应用程序。 当您在顶部运行构建时,它会打印一个选择要执行的构建包的列表,这样您就可以确切地看到正在执行的是什么。 ===>检测参与paketo-buildpack/ca的24个构建包中的6个-证书3.2.4 paketo-buildpack/bellsoft-liberica buildpack/syft 1.13.0 paketo-buildpack/可执行-jar 6.2.4 paketo-buildpack/dist-zip 5.2.4 paketo-buildpack/spring-boot 5.13.0 .
  2. 现在,Java和Node.js构建包是分开的,所以您可以得到一个或另一个。这就是为什么默认情况下它运行Java的原因,但是如果您添加了一个package.json文件,它将运行Node.js。他们是相互独立的。 有一个公开发行可以将Node.js添加到Java组中,这样就可以支持像这样的用例。
  3. 如果在构建时尝试使用Node.js/NPM,可以在这里的演示中使用Maven插件安装Node.js。如果您需要构建一个前端并将其与您的Java应用程序捆绑在一起,那么它就可用了。
  4. 如果您在运行时确实需要Node.js/NPM,那么这是一个更棘手的问题。3.)不会那么做的。您需要将Node.js安装到实际运行时容器中的东西。有来自2.的支持)可以做到这一点,但与此同时,还有可供选择的一些。特别是备选案文4)从那个环节。您可以使用apt-buildpack安装Node.js,然后从您的Java应用程序中调用它。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73048483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档