首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解压Dockerfile中的Spring Boot fat jar时出错

解压Dockerfile中的Spring Boot fat jar时出错
EN

Stack Overflow用户
提问于 2021-09-07 16:06:53
回答 3查看 72关注 0票数 0

我正在为我的Spring Boot应用程序构建一个Docker容器。为了优化缓存,我想把Spring Boot生成的fat jar分解成几个层。我能够通过在Gradle文件和Dockerfile之间拆分解包过程来实现这一点,但我更喜欢在Dockerfile中处理所有事情。我目前的方法: Gradle代码片段:

代码语言:javascript
复制
task explodeJar {
   dependsOn(jar)
   doLast {
      project.delete "$projectDir/build/dependencies"
      project.mkdir "$projectDir/build/dependencies"
      exec {
        workingDir "$projectDir/build/dependencies"     
        commandLine "jar", "-xf", "../libs/${project.name}-${project.version}.jar"
      } 
   }
}   

Dockerfile:

代码语言:javascript
复制
ARG DEPENDENCY=/build/dependencies
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","mypackage.MyApp"]

当我运行./gradlew explodeJar命令,然后运行docker build -t myapp-spring:0.0.1-SNAPSHOT --build-arg BUILD_VERSION=0.0.1-SNAPSHOT .时,容器构建没有任何问题,但是当我试图将jar解压缩文件移到Dockerfile中时

代码语言:javascript
复制
ARG BUILD_VERSION

ARG JAR_FILE=build/libs/payouts-spring-${BUILD_VERSION}.jar
ARG DEPENDENCY=/build/dependencies
CMD unzip -d ${DEPENDENCY} ${JAR_FILE}

COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","mypackage.MyApp"]

Docker构建失败,并显示以下错误:

代码语言:javascript
复制
 => CACHED [2/6] RUN yum install -y java-11-amazon-corretto                                                                                                                                                        0.0s
 => CACHED [3/6] RUN yum install -y tar unzip procps                                                                                                                                                               0.0s
 => ERROR [4/6] COPY /build/dependencies/BOOT-INF/lib /app/lib                                                                                                                                                     0.0s
 => ERROR [5/6] COPY /build/dependencies/META-INF /app/META-INF                                                                                                                                                    0.0s
 => ERROR [6/6] COPY /build/dependencies/BOOT-INF/classes /app                                                                                                                                                     0.0s
------
 > [4/6] COPY /build/dependencies/BOOT-INF/lib /app/lib:
------
------
 > [5/6] COPY /build/dependencies/META-INF /app/META-INF:
------
------
 > [6/6] COPY /build/dependencies/BOOT-INF/classes /app:
------
failed to compute cache key: "/build/dependencies/BOOT-INF/classes" not found: not found
EN

回答 3

Stack Overflow用户

发布于 2021-09-07 16:21:40

您将收到"no no file or directory“错误。尝试从dockerfile和target所在的位置运行以下命令。

代码语言:javascript
复制
mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

祝你好运!

票数 0
EN

Stack Overflow用户

发布于 2021-09-09 14:04:32

我通过将jar复制到容器中并解压缩到容器中解决了这个问题:

代码语言:javascript
复制
FROM amazonlinux:2
RUN yum install -y java-11-amazon-corretto
ARG BUILD_VERSION
ENV APP_HOME /apps/services
EXPOSE 8080

# unpack and copy folders
ARG JAR_FILE=build/libs/payouts-spring-${BUILD_VERSION}.jar
ARG JAR_DIR=/build
ARG DOCKER_JAR_FILE=${JAR_DIR}/payouts-spring.jar

COPY ${JAR_FILE}  ${DOCKER_JAR_FILE}
WORKDIR ${JAR_DIR}
RUN  jar -xf ${DOCKER_JAR_FILE}

RUN mkdir -p ${APP_HOME}

RUN cp -R  BOOT-INF/lib ${APP_HOME}
RUN cp -R  META-INF/* ${APP_HOME}/META-INF
RUN cp -R  BOOT-INF/classes/* ${APP_HOME}


WORKDIR /
RUN rm -r ${JAR_DIR}


ENTRYPOINT ["java","-cp","apps/services:apps/services/lib/*", "com.myApp"]
票数 0
EN

Stack Overflow用户

发布于 2021-09-09 14:16:02

不能直接回答你的问题,但你也可以看看jib。它提供了一个Gradle插件,并遵循Docker分层的最佳实践,自动为您创建一个Docker容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69091434

复制
相关文章

相似问题

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