[英]No Main Class found when running a dockerizing image
我有一個大學項目,其中包括構建一個 Java Spring Boot 應用程序,該應用程序可以處理多個 API,這些 API 可以啟動運行 jar 應用程序的新 docker 容器。
目前,我能夠試驗 Spring Boot 的工作原理,因此我構建了一個簡單的 jar 來部署一個簡單的問候 API,該 API 返回“Hello World!”
所以我使用 jib-core 構建並推送了一個 docker 鏡像到我的 DockerHub 存儲庫,它工作正常。
public static void main(String[] args) throws InvalidImageReferenceException, IOException, InterruptedException, ExecutionException, RegistryException, CacheDirectoryCreationException {
Jib.from("openjdk:15")
.addLayer(Arrays.asList(Paths.get("apps/demo-0.0.1-SNAPSHOT.jar")), AbsoluteUnixPath.get("/"))
.setEntrypoint("java", "demo-0.0.1-SNAPSHOT.jar")
.containerize(
Containerizer.to(RegistryImage.named("dmh911/localkube:latest")
.addCredential("username", "password")));
}
問題是,當我執行以下命令docker run -i -t dmh911/localkube:latest
,我得到了這個錯誤:
Error: Could not find or load main class demo-0.0.1-SNAPSHOT.jar
Caused by: java.lang.ClassNotFoundException: demo-0.0.1-SNAPSHOT.jar
這是 jar 清單文件:
Manifest-Version: 1.0
Created-By: Maven Jar Plugin 3.2.0
Build-Jdk-Spec: 15
Implementation-Title: demo
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.restservice.DemoApplication
Spring-Boot-Version: 2.3.4.RELEASE
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
我知道這個問題可能很愚蠢,但我不知道究竟是什么。
您的代碼將執行的是java demo-0.0.1-SNAPSHOT.jar
,它將嘗試運行demo-0.0.1-SNAPSHOT.jar
類,該類不太可能存在,因為這可能是您的 jar 的名稱文件,而不是您要運行的類。
相反,您的入口點應該是java -jar demo-0.0.1-SNAPSHOT.jar
,這意味着您需要將代碼更改為.setEntrypoint("java", "-jar", "demo-0.0.1-SNAPSHOT.jar")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.