简体   繁体   English

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

[英]How to deal with Error: Unable to access jarfile - docker

I'm new to docker and I struggle with "Error: Unable to access jar file target/nbd.jar" .我是 docker 的新手,我遇到了“错误:无法访问 jar 文件目标/nbd.jar”的问题。 My application is a CRUD api for cassandra cluster made with Springboot.我的应用程序是使用 Springboot 制作的 cassandra 集群的 CRUD api。 I'm trying to execute docker-compose up .我正在尝试执行docker-compose up Every cassandra node is running, I only have problem with my API.每个 cassandra 节点都在运行,我只有 API 有问题。 I think the problem is with the Dockerfile, but I don't know how to solve it myself/ Tried different things but none of them worked.我认为问题出在 Dockerfile 上,但我自己不知道如何解决/尝试了不同的方法,但都没有奏效。

Here's my 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"]

My filesystem (I cut everything but docker and target files):我的文件系统(除了 docker 和目标文件之外,我删除了所有文件):

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

And my pom.xml:还有我的 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>

Thanks!谢谢!

You copy jar file from target directory on the local computer to the target directory inside a docker container.您将 jar 文件从本地计算机上的target目录复制到 docker 容器内的target目录。 But then you didn't specify target directory in ENTRYPOINT .但是您没有在ENTRYPOINT中指定target目录。 Simply put, docker can't find your jar file when it tries to start.简而言之,docker 在尝试启动时找不到您的 jar 文件。

Try this:尝试这个:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM