当前位置: 首页 > 知识库问答 >
问题:

如何在没有JAR的情况下为Spring Boot应用程序构建Docker映像

公西嘉玉
2023-03-14

我已经按照这些教程为我的Spring Boot应用程序构建Docker映像,该应用程序使用Maven作为构建工具。我正在Windows10机器上使用boot2docker VM,将我的项目从Bitbucker存储库克隆到VM。

>

  • 使用用于DockerFile的Spotify maven插件。尝试运行./mvnw来构建JAR和Docker映像。但是,我没有在boot2docker中安装Java。因此无法运行Maven包装器./mvnw。

    我试图通过Dockerfile构建JAR,它基于openjdk:8-jdk-alpine映像。我在DockerFile中添加了run./mvnw package指令。然后运行Docker build-t . 来生成Docker映像。它在运行指令时失败,声明/bin/sh:mvnw:找不到命令“/bin/sh-c mvnw package”返回非零代码:127

    我的Dockerfile,位于mvnw所在的目录中:

    MAINTAINER myname
    
    VOLUME /tmp
    
    RUN ./mvnw package
    
    ARG JAR_FILE=target/myproject-0.0.1-SNAPSHOT.jar
    
    COPY ${JAR_FILE} app.jar
    
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
  • 共有1个答案

    广绪
    2023-03-14

    您可以安装maven并直接在构建中运行编译。通常,这将是一个多阶段构建,以避免将整个jdk包含在推送的映像中:

    FROM openjdk:8-jdk-alpine as build
    RUN apk add --no-cache maven
    WORKDIR /java
    COPY . /java
    RUN mvn package -Dmaven.test.skip=true
    EXPOSE 8080
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/java/target/myproject-0.0.1-SNAPSHOT.jar"]
    

    上面是从我过去做过的同样的例子中重新做的一个精简版。您可能需要调整入口点中的文件名,但关键步骤是安装maven并在构建中运行它。

     类似资料:
    • 问题内容: 我正在尝试为Ruby项目构建Docker映像。问题在于该项目具有一些gem依赖项,需要构建本机扩展。我的理解是,我有两种选择: 从已经安装了构建工具的基础映像开始。 使用没有构建工具的基础映像,并在运行之前在Dockerfile中安装构建工具。 在主机上预编译本机扩展,将gem供应商化,然后简单地将生成的包复制到映像中。 1和2似乎要求生成的映像包含构建本机扩展所需的构建工具。出于安全

    • 我正在尝试使用Poc为我们的项目创建一个侦探应用程序,以便使用Spring mvc(即没有Spring Boot)进行日志记录。我无法在网络上找到我的mvc文档/材料。 那么,如何创建Tracer、spanbean并注入记录器以进行日志记录呢?

    • 我使用创建了一个应用程序构建文件。这将用和文件填充文件夹。 我在internet上进行了搜索,发现可以使用运行这些文件。不幸的是,这会产生以下错误输出: org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.boot.autocigure.orm.jpa.hibernatejpaAutoCo

    • 我想在Java Spring boot中获取我的应用程序的当前url。但问题是,我想从类而不是从中获得它。我试图从获取这个,但我无法将其包导入我的类。 请帮我得到我的网站的网址,不应该硬编码。或者如果有一种方法可以使用到我的util类。

    • 问题内容: 我想知道如何在Spring MVC上引导我的应用程序? 我有一个初始化器: 我知道我们为什么需要以及如何使用它来引导应用程序。但是我不明白,如果没有文件(只有),怎么知道应该使用哪个servlet来引导应用程序? 依存关系 我在Spring核心中找到了此类。使用它来引导我的应用程序是否正确? http://docs.oracle.com/javaee/7/api/javax/servl