Docker容器启动时在jar中找不到api-rest的主类

Posted

技术标签:

【中文标题】Docker容器启动时在jar中找不到api-rest的主类【英文标题】:Docker container cannot find the main class of api-rest in jar when launch 【发布时间】:2020-02-05 14:16:26 【问题描述】:

我用 gradle 构建了我的 spring-boot api 的 jar,但是在启动 docker 容器后它会自行停止并显示“错误:无法找到或加载主类 com.test.exampleController”

这是一个 Docker 项目

我将此代码插入到我的 build.gradle 中:

task fatJar(type: Jar) 
    manifest 
        attributes 'Main-Class': 'com.test.exampleController'
    
    baseName = project.name + '-all'
    from  configurations.compile.collect  it.isDirectory() ? it : zipTree(it)  
    with jar

我不确定我是否需要在课堂上进行一些注释,或者问题是因为我有 3 个控制器

我希望使用 tha spring-boot api 运行一个 docker 容器,并使用其他应用程序(例如邮递员)对其进行测试

【问题讨论】:

不要编写自己的任务。 gradle spring boot 任务完成了所有这些。所以放弃你的fatJar任务,只使用spring boot任务(如果你简单地添加插件,它将默认执行)。 我尝试使用 gradle 任务生成 jar 文件,但没有生成任何内容。我按照以下步骤操作: gradle tab --> projectName --> Tasks --> build --> jar 我认为我的 build.gradle 中需要一个 instruccion 缺失,你能给我一个例子吗?感谢您的回复。 好吧,我终于找到了我的 gradle 中缺少的代码:``` jar baseName = 'example-api' version = '0.1.0' `` 应用 spring boot 插件,只需执行 gradle build 即可。它将采用默认值(名称和组)来生成工件。 【参考方案1】:

最后我发现了错误,我尝试使用不正确的启动器构建 jar。在 gradle 选项卡中,我可以找到任务,在 build 内部在其他人之间出现“jar”,这是我的错误,我在想“如果我想要一个 jar,这是我的任务”,但不是,我想要一个 springboot 的 jar,这意味着我需要那个 jar 有主类和启动器。为此,我的任务中存在另一个选项“bootjar”。构建一个定义了主类和启动类的清单文件。辅助图片

【讨论】:

以上是关于Docker容器启动时在jar中找不到api-rest的主类的主要内容,如果未能解决你的问题,请参考以下文章

Docker:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”java\“:$PATH 中找不到可执行文件”

Docker - 在 docker 容器日志中找不到模块

在容器中找不到 Docker“/usr/bin/php”

在 docker php 容器中找不到 MySQLi

Python 脚本在 docker 容器中找不到使用 CRON 运行的 ENV 变量

lsb_release:在最新的 Ubuntu Docker 容器中找不到命令