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

使用JIB插件对接多模块Spring Boot应用程序

昌琪
2023-03-14

我有一个Spring boot应用程序,并使用spotify插件对我的应用程序进行Dockerize。所以,我将有一个类似下面的Dockerfile。

FROM jdk1.8:latest  

RUN mkdir -p /opt/servie

COPY target/service.war /opt/service

ENV JAVA_OPTS="" \
    JAVA_ARGS=""

CMD java ${JAVA_OPTS} -jar /opt/service/service.war ${JAVA_ARGS}

我遇到了JIB,它看起来很酷。但是,努力让它工作。

我在下面添加了pom条目。

<plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>0.9.6</version>
        <configuration>
          <from>
            <image>jdk1.8:latest</image>
          </from>
          <to>
            <image>docker.hub.com/test/service</image>
          </to>
        </configuration>
      </plugin>

mvn编译jib:构建

我明白了。

[INFO]构建依赖层...[INFO]构建类层...[INFO]构建资源层...

当我运行docker映像时,它说Jar文件不存在。我有一个多模块maven项目,希望在从父pom运行mvn compile jib:build时对多个模块进行dockerize。有什么帮助吗?

共有3个答案

严兴言
2023-03-14

通过使用jib maven插件,您无需编写docker文件,jib直接为您构建映像,而无需公开dockerfile。

我觉得在你的pom里。xml将包装从“war”切换到“jar”

足以让你成功地跑步

mvn compile jib:build

(如果docker.hub.com/test/service是私有存储库,将失败,在这种情况下,您需要切换到公共或提供您的凭据)

井唯
2023-03-14

尝试将Dockerfile中的行副本更改为

COPY target/service.war /opt/service/service.war

顺便说一句,您可以在Dockerfile中使用WORKDIR指令来使用相对路径

司寇山
2023-03-14

是的。JIB不需要Dockerfiledockerd

分享下面的一个例子,你可以把它复制到你的pom的plugins部分。xml

<plugin>  
    <groupId>com.google.cloud.tools</groupId>  
    <artifactId>jib-maven-plugin</artifactId>  
    <version>0.9.7</version>  
    <configuration>  
    <allowInsecureRegistries>true</allowInsecureRegistries>  
    <from>  
        <image>gcr.io/distroless/java</image>  
    </from>  
    <to>  
    <!-- make sure you already have created a project at Google Cloud Platform, see https://cloud.google.com/container-registry/ -->  
        <image>gcr.io/my-gcp-project/${project.artifactId}:${project.version}</image>  
        <credHelper>gcr</credHelper>  
    </to>  
    <container>  
        <jvmFlags>  
            <jvmFlag>-Xms256m</jvmFlag>  
            <jvmFlag>-Xmx512m</jvmFlag>  
            <jvmFlag>-Xdebug</jvmFlag>  
            <jvmFlag>-XX:+UnlockExperimentalVMOptions</jvmFlag>  
            <jvmFlag>-XX:+UseCGroupMemoryLimitForHeap</jvmFlag>  
        </jvmFlags>  
        <mainClass>learnmake.microservices.RunApplication</mainClass>  
        <ports>  
            <port>8080</port>  
            <!-- <port>4000-4004/udp</port> -->  
        </ports>  
        <format>OCI</format>  
        <!-- OR <format>Docker</format> -->  
        <useCurrentTimestamp>true</useCurrentTimestamp>  
      </container>  
    </configuration>  
</plugin>   

有关更多详细示例,请参阅learnmake MicroService

 类似资料:
  • 我有一个Maven Java应用程序,我正在尝试进行对接。到目前为止,我有以下dockerfile,是我从这个答案中复制的。 如果我的应用程序是一个单模块项目,这将是很好的,但是因为它是多模块的,所以我假设我不能仅仅使用。 但是,这会在阶段出错: 注意,来自我的本地m2文件夹。

  • 我有一个Spring boot应用程序,它有许多模块,如错误模块、持久性、控制器等,如下所示 使用Maven jib插件构建docker镜像,pom中的配置如下。xml 构建成功了。但是当我运行图像时,它的抛出错误是:找不到或加载主类com。a、 卑诗省申请 如何使用Jib构建图像?。我错过了什么?

  • 我有1个应用程序和2个模块 框架结构 但我不能在MyApp中使用MyModule的文件。IDE显示我“无法访问”错误,我想扩展一个MyModule类的类。而且它不是从MyModule创建类的,有人对此有想法吗?怎么了?

  • 嗨,我正在使用maven多模块项目和google cloudendpoint作为api管理,我能够成功地使用appengine devserver运行应用程序,但当我将它部署到appengine时,它显示如下错误。

  • 我花了相当长的时间,但我无法通过这个(配置)问题。 技术栈:Java(1.8)、Springboot(starter-parent、starter-web)、Maven、IntelliJ IDEA 描述:尝试创建一个多模块Java应用程序,由2个模块组成(最初): null 问题:Springboot在发送http请求时没有从webgateway模块=>404错误加载/扫描RestControll

  • 我有一个多模块的项目,有两个模块:war和ear模块。我正在尝试使用Maven发行版插件来管理发行版。 我的配置到目前为止... 父POM: war模块POM: ear模块POM: 正如您看到的表单日志,test-war-0.0.1-sources.jar正在上传两次。这是为什么?我怎样才能编辑我的配置,使它只上传一次?