赞
踩
FileNotFoundException。。没错、这篇还是从读取的文件找不到的问题开始,今天来个终极版( ̄∇ ̄)/
一开始我把要读取的文件放在了项目根路径,package就没把它打进去,显然是找不到的,于是我把这个JSON文件移到了resources中
此时可以看到,这个文件也打进了target中,这部分可以参考
【填坑向】Linux获取Java程序resource下的文件路径(这次的坑好像没填住……
之前的一篇的文章,那里有记录过获取路径失败的原因,这里就不重复赘述叻
今天这篇是有新发现!算是填上一篇文章的坑( ̄∇ ̄)/
在官网上了解到可以通过解包的方式,来读取jar包中的内容
官方地址:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/deployment.html#deployment
于是在本地的终端中对打好的jar包依次执行了这两行命令,运行无比顺滑然后我就也在Dockerfile中加了如下红框框内的两行
CMD ["jar","-xf","my-1.0.0-SNAPSHOT.jar"] CMD ["java","org.springframework.boot.loader.JarLauncher"]
推到服务器上。。。就是=[,,_,,]:3哭死在阿里云。。。
报找不到org.springframework.boot.loader.JarLauncher
最初单纯的俺一直觉得是没有填对路径,于是按照各种文章尝试:比如切换WORKDIR,改绝对路径、改相对路径。。。
服务器日志都是坚持告诉我:Could not find the main class: org.springframework.boot.loader.JarLauncher
即将哭死的我一不小心从旁边大佬处得知CMD指令只有最后一个有效。。。
WHAT?! RUN、CMD 和 ENTRYPOINT 指令都可以用来执行具体的命令RUN 指令是在 Docker 镜像构建时发挥作用, 可以使用多个该命令,且执行结果会记录到镜像中CMD 和 ENTYPOINT 指令是在容器启动时自动执行,均只有最后一个该指令有效,且均可以在 docker run 中被覆盖ENTRYPOINT 指令和 CMD 的区别在于使用 ENTRYPOINT 时 CMD 指令会被作为其默认参数,而用户也可以在启动容器时通过覆盖 CMD 指令来输入参数;此外, 这也意味着 ENTRYPOINT 指令的内容不易被用户命令覆盖。
好吧(谁让我不好好学docker=[,,_,,]:3)
怪不得看到很多案例使都是使用entrypoint.sh文件来执行多条脚本的,俺也来!
于是我在Dockerfile同级目录下新建了一个entrypoint.sh文件,把多条命令写在这个文件中
在Dockerfile中添加执行这个脚本的代码
ENTRYPOINT ["/app/docker/entrypoint.sh"]
又是一顿找不到。。。
no such file or directory
我们先来分析下这个异常记录
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。