How to deal with Error: Unable to access jarfile - docker
How to deal with Error: Unable to access jarfile - docker
我是 docker 的新手,我遇到了 “错误:无法访问 jar 文件 target/nbd.jar”。我的应用程序是用 Springboot 制作的 cassandra 集群的 CRUD api。我正在尝试执行 docker-compose up
。每个 cassandra 节点都是 运行,我只有 API 有问题。我认为问题出在 Dockerfile 上,但我不知道如何自己解决/尝试了不同的方法,但 none 有效。
这是我的 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 文件从本地计算机上的 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"]
我是 docker 的新手,我遇到了 “错误:无法访问 jar 文件 target/nbd.jar”。我的应用程序是用 Springboot 制作的 cassandra 集群的 CRUD api。我正在尝试执行 docker-compose up
。每个 cassandra 节点都是 运行,我只有 API 有问题。我认为问题出在 Dockerfile 上,但我不知道如何自己解决/尝试了不同的方法,但 none 有效。
这是我的 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 文件从本地计算机上的 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"]