这篇是几年前写的文章,之前一直纠结按照知识的学习顺序去发布文章,所以有些文章写了但没有发出来,最近准备把之前写的文章发一发,不纠结这个问题了,不然好多文章可能因为软件版本过时等问题写了都过期了,帮助不到大家了。
K8s启动pod失败,日志报非法的Jar包排查思路(Invalid or corrupt jarfile /app/xxxx,jar)前段时间工作中遇到的一个问题,把解决思路分享给大家。
文章目录
问题背景
1、pod一直重启,查看日志报非法的jar包的错误Invalid or corrupt jarfile /app/xxxx,jar,发现是执行了一个restart的脚本,但是脚本是在打包这个镜像的基础镜像里放进去的,基础镜像的dockerfile也没有,所以不太好看,pod启动不了也无法进入pod去排查。
解决思路
1、想看脚本不止可以从dockerfile中看,也可以在pod中看,虽然我们现在的pod是异常的,但是我们可以通过修改deploy中containers字段下command的命令,原本是
- /bin/sh
- /app/bin/restart.sh
- start
修改成
- tailf
- /app/bin/restart.sh
这样会把容器夯住,pod就是启动状态了,然后exec就可以点进去看脚本。如果他没有这个参数的话,我们也可以加上这个command给他覆盖掉。因为如果command写了,会覆盖Dockerfile中的配置。
2、看了脚本后发现是在java -jar的地方报的错,手动执行restart的脚本还是报错,然后我就想会不会jar包有问题,去jar包存放目录大小看到了jar包大小为0,这肯定是不正常的,然后开发去看了打包成镜像前的jar包大小,也是0,这样就找到问题了,让开发打了包重新部署,pod就正常了。
3、听开发分析是因为打包前要清除最外层的output,否则就会生成一个空的jar包。