【问题标题】:Error: Invalid or corrupt jarfile /app.jar错误:无效或损坏的 jarfile /app.jar
【发布时间】:2019-09-11 15:44:31
【问题描述】:

我正在尝试将 spring boot 创建的微服务推送到 ibm 云托管的 K8 集群,但在启动时不断收到以下错误:

Error: Invalid or corrupt jarfile /app.jar

我的码头文件:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

我的 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>projects</groupId>
  <artifactId>mydb2jdbcproject</artifactId>
  <version>1</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <java.version>1.8</java.version>
    <spring-cloud.version>Dalston.SR4</spring-cloud.version>
    <docker.image.prefix>springio</docker.image.prefix>
    <app.name>mydb2jdbcproject</app.name>
  </properties>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.15.RELEASE</version>
  </parent>

  <dependencies>
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>com.ibm.db2.jcc</groupId>
      <artifactId>db2jcc4</artifactId>
      <version>4.26.14</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.json</groupId>
      <artifactId>javax.json-api</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
      <version>2.4.0</version>
    </dependency>
    <dependency>
      <groupId>com.ibm.cloud</groupId>
      <artifactId>ibm-cloud-spring-boot-service-bind</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.microprofile.config</groupId>
      <artifactId>microprofile-config-api</artifactId>
      <version>1.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <repositories>
    <repository>
      <id>repo</id>
      <url>file://${project.basedir}/lib</url>
    </repository>
  </repositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>1.4.9</version>
        <configuration>
          <repository>${docker.image.prefix}/${project.artifactId}</repository>
          <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
          </buildArgs>
        </configuration>
      </plugin>
        <plugin>
  <groupId>io.fabric8</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <images>
      <image>
        <name>us.icr.io/rbs1/rbstest</name>
        <build>
          <from>adoptopenjdk/openjdk8-openj9</from>
          <entryPoint>
            <exec>
              <arg>java</arg>
              <arg>-jar</arg>
              <arg>/${project.build.finalName}.jar</arg>
            </exec>
          </entryPoint>
          <assembly>
            <targetDir>/</targetDir>
            <mode>dir</mode>
            <descriptorRef>artifact</descriptorRef>
          </assembly>
        </build>
      </image>
    </images>
  </configuration>
</plugin>
    </plugins>
  </build>

</project>'

我的事件日志:

Events:
  Type     Reason     Age                    From                    Message
  ----     ------     ----                   ----                    -------
  Normal   Scheduled  9m10s                  default-scheduler       Successfully assigned default/basic-deployment-768559cfc6-6fd2j to 10.144.195.59
  Normal   Created    8m15s (x4 over 9m)     kubelet, 10.144.195.59  Created container
  Normal   Started    8m15s (x4 over 9m)     kubelet, 10.144.195.59  Started container
  Normal   Pulling    7m35s (x5 over 9m8s)   kubelet, 10.144.195.59  pulling image "------/---------"
  Normal   Pulled     7m34s (x5 over 9m)     kubelet, 10.144.195.59  Successfully pulled image "--------/---------"
  Warning  BackOff    4m6s (x24 over 8m57s)  kubelet, 10.144.195.59  Back-off restarting failed container

图像保存在 docker 存储库中,然后拉入集群。我已完全登录到 docker 和 ibmcloud。每次容器重启6次但总是不成功。我跑了

mvn package

每次在我构建 docker 映像之前,确保有一个可用的 jar 并且该 jar 保存在名为 mydb2jdbcproject-1 的目标文件夹中。

【问题讨论】:

  • 您能否提供docker images 的输出。你可以在 docker 中创建容器并在里面运行任何命令吗?

标签: docker kubernetes jar ibm-cloud


【解决方案1】:

相当尴尬的是,我没有意识到我需要用${JAR_FILE} 指向正确的 jar 文件。在确保它指向我的应用程序 jar 之后,它一切正常。谢谢!

留在这里以防有人需要。

【讨论】:

    【解决方案2】:

    在 Dockerfile 中替换

    COPY ${JAR_FILE} app.jar
    

    与

    COPY ${JAR_FILE} /app.jar
    

    【讨论】:

    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 2016-07-29
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多