起因

        近日有个项目用到了LED,负责与LED通讯的SDK是java,实现了通过接口来调用LED。

本地Springboot项目怎么跑都没问题,打成jar发布到服务器上就报错,服务器采用docker部署。

以下是Dockerfile内容

FROM java:8-alpine
VOLUME /tmp
ADD app.jar app.jar
ADD /images/ /images/
EXPOSE 8080
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

错误信息

java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

定位问题

原因是Alpine环境缺少对应的包。此问题影响所有使用官方Alpine的Java环境。

解决办法

Dockerfile添加如下代码

RUN apk add --update ttf-dejavu fontconfig

或者

RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories
RUN apk --update add curl bash ttf-dejavu && rm -rf /var/cache/apk/*

例如

FROM java:8-alpine
VOLUME /tmp
ADD app.jar app.jar
ADD /images/ /images/
EXPOSE 8080
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
# 解决alpine底包没有字体问题
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories
RUN apk --update add curl bash ttf-dejavu && rm -rf /var/cache/apk/*
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐