dockerizing Spring Boot 应用程序错误:错误:无效或损坏的 jarfile /app.jar

Posted

技术标签:

【中文标题】dockerizing Spring Boot 应用程序错误:错误:无效或损坏的 jarfile /app.jar【英文标题】:dockerizing Spring Boot Application error: Error: Invalid or corrupt jarfile /app.jar 【发布时间】:2020-02-28 06:41:30 【问题描述】:

我开始使用 docker,并且正在尝试对我的 Spring boot 应用程序进行 docker 化。我使用 spring initializr 生成了这个。我正在使用 Maven。我的 DockerFile 看起来像这样:

FROM java:8-jdk-alpine

COPY $JAR_FILE app.jar

WORKDIR /usr/app

EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

这很简单。

我执行了接下来的命令:

docker build -t shortenurl .

我可以在控制台中看到带有 docker 图像的图像:

但是当我尝试使用以下命令运行映像时:docker run -p 8080:8080 shortenurl 我收到以下错误消息:错误:无效或损坏的 jarfile /app.jar

我尝试了不同的配置,但不太确定。有什么建议吗?

谢谢。

这是我的插件 pom.xml 插件部分:

       <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.2.3</version>
                <configuration>
                    <imageName>$docker.image.prefix/$project.artifactId</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <directory>$project.build.directory</directory>
                            <include>$project.build.finalName.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>

这是我在命令后的日志:docker build -t shorturl .

$ docker build -t shortenurl .
Sending build context to Docker daemon  32.89MB
Step 1/5 : FROM java:8-jdk-alpine
 ---> 3fd9dd82815c
Step 2/5 : COPY $JAR_FILE app.jar
 ---> 248aa4be697d
Step 3/5 : WORKDIR /usr/app
 ---> Running in 5fcd71c548af
Removing intermediate container 5fcd71c548af
 ---> bc344b970b11
Step 4/5 : EXPOSE 8080
 ---> Running in 46b4e4f8e9b7
Removing intermediate container 46b4e4f8e9b7
 ---> 6b4f55a86a23
Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in 838a6052f4c8
Removing intermediate container 838a6052f4c8
 ---> 7d7d272ea42d
Successfully built 7d7d272ea42d
Successfully tagged shortenurl:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

【问题讨论】:

你做了什么来调试这个?例如,如果你在镜像中得到一个调试shell,那么app.jar文件实际上是在镜像根目录中吗? 您的app.jar 可能无法执行。你能显示你的pom.xml,特别是spring-boot-maven-plugin吗? @HasanCanSaral 我用插件部分编辑了我的问题。 【参考方案1】:

您正在使用spring-boot-maven-plugin 构建,但您没有生成可执行的 jar。将插件的配置更新为:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

你应该没事的。

【讨论】:

我遇到了同样的问题,我在命令之后用日志更新了问题: docker build -t shorturl 。谢谢! 抱歉完全把这个问题误认为是另一个问题。我猜你的COPY 操作不太顺利。如果您使用 docker 本身构建,docker-maven-plugin 有什么用? @rasilvap 你可以试试FROM java:8-jdk-alpine COPY target/app**.jar /usr/app/app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/usr/app/app.jar"] 并确保你的jar 文件被实际复制。

以上是关于dockerizing Spring Boot 应用程序错误:错误:无效或损坏的 jarfile /app.jar的主要内容,如果未能解决你的问题,请参考以下文章

如何将 application.properties 文件提供给 Spring Boot Docker 映像作为输入

(转)Spring Boot 2 :使用 Docker 部署 Spring Boot

docker 部署Spring Boot:Docker化Spring Boot应用程序

Spring Boot 2.0:Docker Compose + Spring Boot +

Spring Boot 2.0:使用 Docker 部署 Spring Boot

Spring Boot 2.0:使用 Docker 部署 Spring Boot