java - 运行 dockerizing 镜像时找不到主类

标签 java docker maven jib maven-jib

我有一个大学项目,其中包括构建一个 Java Spring Boot 应用程序,该应用程序可以处理多个 API,这些 API 可以启动运行 jar 应用程序的新 docker 容器。

目前,我能够试验 Spring Boot 的工作原理,因此我构建了一个简单的 jar 来部署一个返回“Hello World!”的简单问候语 API

因此,我使用 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 list 文件:

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 code>,它不太可能存在,因为这可能是您的 jar 文件的名称,而不是您要运行的类。

您的入口点应该是 java -jar demo-0.0.1-SNAPSHOT.jar,这意味着您需要将代码更改为 .setEntrypoint("java", "-jar ”,“demo-0.0.1-SNAPSHOT.jar”)

关于java - 运行 dockerizing 镜像时找不到主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64731306/

相关文章:

java - 从 Java 运行 MATLAB 函数

来自 hub.docker.com 的 Docker 镜像统计信息

docker - 为什么我发布的端口不起作用?

maven 程序集忽略父依赖项

java - 当我执行 mvn clean install 时 Junit 测试用例没有运行

java - 如何减少使用 randomUUID( ) 生成的 UUID 的长度

java - 使用公共(public) ipv4 地址创建 HttpServer

java - 向 Maven 添加系统依赖

java - 在 Java 跨平台桌面应用程序上接收推送通知

python - cv2.VideoCapture 在 docker 容器中不起作用