【问题标题】:How to deal with Error: Unable to access jarfile - docker如何处理错误:无法访问 jarfile - docker
【发布时间】:2021-01-06 20:09:14
【问题描述】:

我是 docker 新手,遇到了 “错误:无法访问 jar 文件 target/nbd.jar”。我的应用程序是用 Springboot 制作的 cassandra 集群的 CRUD api。我正在尝试执行docker-compose up。每个 cassandra 节点都在运行,我只有 API 有问题。我认为问题出在 Dockerfile 上,但我自己不知道如何解决/尝试了不同的方法,但都没有奏效。

这是我的 Dockerfile:

FROM maven:3.6.0-jdk-11-slim 
ARG JAR_FILE
COPY target/${JAR_FILE} target/nbd.jar
ENTRYPOINT ["java","-jar","nbd.jar"]

我的文件系统(我剪切了除了 docker 和目标文件之外的所有文件):

├── docker
│   ├── docker-compose.yaml
│   └── Dockerfile
(...)
├── src
│   ├── (...)                 
├── stop_all.sh
└── target
    ├── classes
    │   (...)
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    ├── nbd.jar
    └── test-classes

还有我的 pom.xml:

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.16.Final</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-cassandra</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    
   (...)

</project>

谢谢!

【问题讨论】:

  • 你在构建镜像时向JAR_FILE传递了什么值?

标签: java docker maven jar


【解决方案1】:

您将 jar 文件从本地计算机上的 target 目录复制到 docker 容器内的 target 目录。但是你没有在ENTRYPOINT 中指定target 目录。简单来说就是docker启动时找不到你的jar文件。

试试这个:

FROM maven:3.6.0-jdk-11-slim 
ARG JAR_FILE
COPY target/${JAR_FILE} nbd.jar
ENTRYPOINT ["java","-jar","nbd.jar"]

【讨论】:

  • 我试过这个。我得到一个不同的错误:错误:无效或损坏的 jarfile nbd.jar
  • 解决了访问 jar 文件的第一个问题。你是怎么得到你的jar文件的?你的jar文件有问题。如果您将尝试通过命令行在本地运行它。有用吗?
  • 我使用 IntelliJ IDEA 创建并构建了它
猜你喜欢
  • 2019-11-17
  • 2019-06-03
  • 2018-12-17
  • 1970-01-01
  • 2021-01-22
  • 2018-11-07
  • 2020-12-01
  • 2017-04-13
  • 1970-01-01
相关资源
最近更新 更多