运行基于SpringBoot的Docker镜像返回错误信息:无效或损坏的jarfile /app.jar

我遵循Spring 官方教程 ( https://spring.io/guides/gs/spring-boot-docker/ )来构build基于springBoot的应用程序到docker镜像。 Docker镜像已经成功构build,但是当我想执行docker run命令来启动一个容器时,我收到以下错误信息:

 Error: Invalid or corrupt jarfile /app.jar 

包容器无法正常启动。

有没有人得到相同的错误信息? 我真的需要你的帮助。 非常感谢你!

java应用程序的结构

 Demo └── src | ├── main | │ ├── java | │ │ └── org | │ │ └── demo | │ │ └── Application.java | │ └── resources | │ └── application.properties | └── test | └── java | └── org | └── demo | └── Application.java ├──── Dockerfile ├──── pom.xml 

pom.xml的内容

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.executablejar</groupId> <artifactId>demo</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>demo Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <java-version>1.8</java-version> <docker.image.prefix>springDemo</docker.image.prefix> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <finalName>demo</finalName> </build> 

Dockerfile的内容

 FROM java:8 EXPOSE 8080 ADD /target/app.jar demo.jar ENTRYPOINT ["java","-jar","demo.jar"] 

构build和运行图像的命令

进入项目目录。让我们说D:/ Demo

 $ cd D/demo $ mvn clean install $ docker build demo . $ docker run -p 8080:8080 -t demo