簡體   English   中英

安裝了 Npm 的 Spring Boot 構建映像

[英]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");

一些筆記。

  1. 當您添加兩個構建包時,例如--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 ...
  2. 現在,Node.js buildpack 和 Java buildpack 是分開的,所以您可以選擇其中一個。 這就是它默認運行 Java 的原因,但如果添加package.json文件,它會運行 Node.js。 它們彼此獨立。

    將 Node.js 添加到 Java buildpack 組中存在一個未解決的問題,以便可以支持這樣的用例。

  3. 如果您嘗試在構建時使用 Node.js/NPM,您可以在此處的演示中執行類似操作,您可以使用 Maven 插件安裝 Node.js。 如果您可能需要構建一個前端並將其與您的 Java 應用程序捆綁在一起,那么它將可用。

  4. 如果您在運行時確實需要 Node.js/NPM,這是一個更棘手的問題。 3.) 不會那樣做。 您需要將 Node.js 安裝到實際運行時容器中的東西。 得到 2.) 的支持可以做到這一點,但與此同時,有一些可用的選項 特別是來自該鏈接的選項 4.)。 您可以使用apt-buildpack安裝 Node.js,然后從您的 Java 應用程序中調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM