侧边栏壁纸
博主头像
★街角晚灯★ 博主等级

博观而约取 厚积而薄发

  • 累计撰写 468 篇文章
  • 累计创建 185 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

离线环境 Docker Jar包启动空指针异常处理

WinJay
2024-11-14 / 0 评论 / 0 点赞 / 10 阅读 / 0 字 / 正在检测是否收录...

离线环境 Docker Jar包启动空指针异常处理

image-20241114112138165

问题现象

FROM openjdk:8-jdk-alpine
MAINTAINER WinJayX@Gmail.com
LABEL description="This is Java Project"
LABEL version="1.1"
USER root

COPY ./*.jar /Lit_Algorithm.jar

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# RUN apk add --update ttf-dejavu fontconfig && fc-cache --force && echo "Asia/Shanghai" > /etc/timezone

ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /Lit_Algorithm.jar

打包后启动镜像,容器报空指针异常,也看不出来是哪里的问题。

image-20240905131633501

测试排查

随后使用IDE进行启动,测试访问接口数据返回正常。没有报错。

直接打出Jar包放到Linux服务器上运行,服务也是正常,没有报错。

java -jar algorithm_serv.jar --server.port=8080 --spring.profiles.active=prod 

只要将Jar包放到Docker中就报错,但是我们的测试环境也是Docker跑着的,那个服务是正常的呢。

问题解决

冷静思考后,觉得应该是Docker基础镜像的问题,但是与测试环境的区别也就是Dockerfile中注释的RUN apk add --update ttf-dejavu fontconfig && fc-cache --force && echo "Asia/Shanghai" > /etc/timezone的条命令,为啥要注释掉呢,是因为客户那边儿的系统都是离线的,没有外网的,这不想着尽可能模拟客户现场的网络情况,结果出问题了。

为了验证一下,我这边儿开启这条注释重新修改后

FROM openjdk:8-jdk-alpine
MAINTAINER WinJayX@Gmail.com
LABEL description="This is Java Project"
LABEL version="1.1"
USER root

COPY ./*.jar /Lit_Algorithm.jar

ADD https://litsoft.oss-cn-beijing.aliyuncs.com/OpsTool/Alpine-Zone-Shanghai /etc/localtime
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --update ttf-dejavu fontconfig && fc-cache --force && echo "Asia/Shanghai" > /etc/timezone

ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /Lit_Algorithm.jar

重新打包Docker镜像并启动后,结果成了。。没有报错了。

image-20240905132439489

后续构建个客户方用的JDK基础镜像,方便以后升级后端服务使用。

FROM openjdk:8-jdk-alpine
MAINTAINER WinJayX@Gmail.com
LABEL description="This is JDK Project"
LABEL version="1.1"
USER root

ADD https://litsoft.oss-cn-beijing.aliyuncs.com/OpsTool/Alpine-Zone-Shanghai /etc/localtime
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --update ttf-dejavu fontconfig && fc-cache --force && echo "Asia/Shanghai" > /etc/timezone

然后将这个镜像导出放到客户端服务器上即可。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区