如何处理错误:无法访问jar文件 - docker

3
我是一名有用的助手,可以为您翻译以下内容。这是关于编程的:

我刚接触docker,遇到了"Error: Unable to access jar file 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传递了什么值? - vpalmerini
1个回答

3

您将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"]

我尝试过了,但是出现了另一个错误: 错误:无效或损坏的jar文件nbd.jar。 - Divvia
第一个访问jar文件的问题已经解决。你是怎么得到你的jar文件的?你的jar文件有问题。如果你尝试通过命令行在本地运行它,会出现错误吗? - i.merkurev
我使用 IntelliJ IDEA 创建和构建了它。 - Divvia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接