Java 如何处理错误:无法访问jarfile-docker

Java 如何处理错误:无法访问jarfile-docker,java,docker,maven,jar,Java,Docker,Maven,Jar,我是docker的新手,遇到了“错误:无法访问jar文件target/nbd.jar”。我的应用程序是一个用于cassandra集群的CRUDAPI,由Springboot制作。我正在尝试执行docker compose up。每个cassandra节点都在运行,我只对我的API有问题。我想问题出在Dockerfile上,但我自己不知道如何解决它/尝试了不同的方法,但没有一种有效 这是我的Dockerfile: FROM maven:3.6.0-jdk-11-slim ARG JAR_FILE

我是docker的新手,遇到了“错误:无法访问jar文件target/nbd.jar”。我的应用程序是一个用于cassandra集群的CRUDAPI,由Springboot制作。我正在尝试执行
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和目标文件外,我剪切所有文件):

还有我的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>


11
org.springframework.boot
弹簧启动机tomcat
org.hibernate
休眠验证器
6.0.16.1最终版本
org.springframework.boot
弹簧靴起动器执行器
2.1.4.1发布
org.projectlombok
龙目
1.18.6
假如
com.google.code.gson
格森
2.8.5
org.springframework.boot
弹簧启动启动器数据卡桑德拉
org.springframework.boot
弹簧启动装置
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
springbootmaven插件
(...)

谢谢

将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\u文件传递什么值?我尝试了这个。我得到一个不同的错误:错误:无效或损坏的jarfile nbd.jar访问jar文件的第一个问题已经解决。你是怎么得到你的jar文件的?您的jar文件有问题。如果您试图通过命令行在本地运行它。它有用吗?我用IntelliJ IDEA创建并构建了它
FROM maven:3.6.0-jdk-11-slim 
ARG JAR_FILE
COPY target/${JAR_FILE} nbd.jar
ENTRYPOINT ["java","-jar","nbd.jar"]