四畳半神话大系

Spring Cloud 疑难杂症(6): OpenJDK 字体库缺失

在微服务中写导出功能时使用到了poi库。线下测试没问题,已部署到线上就报NPE,查看报错原因

1
2
3
4
java.lang.NullPointerException
at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
at sun.awt.FontConfiguration.init(FontConfiguration.java:107)

由于本地环境使用JDK, 生产使用docker,基础镜像是openjdk,缺少了字体库.只要在Dockerfile上安装对应库即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FROM openjdk:8-jre-alpine
VOLUME /tmp
ADD article-service-1.0-SNAPSHOT.jar app.jar
# 修改源
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories

# 安装需要的软件
RUN apk update && \
apk add --no-cache ca-certificates && \
apk add --no-cache curl bash && \
# 缺失的字体库
apk --no-cache add fontconfig ttf-dejavu
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENV JAVA_OPTS="-Xmx512m -Xms256m"
ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions","-XX:+UseCGroupMemoryLimitForHeap", "-Dfile.encoding=UTF-8","-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
EXPOSE 8016
HEALTHCHECK --interval=3m --timeout=10s --start-period=3m --retries=3 CMD curl -f http://localhost:8016/actuator/health || exit 1

专题:

本文发表于 2020-04-04,最后修改于 2020-04-04。

本站永久域名blog.amoyiki.com,也可搜索「 四畳半神话大系 」找到我。

期待关注我的 ,查看最近的文章和动态。


上一篇 « Spring Cloud 疑难杂症(5): docker swarm 环境下优雅更新服务 下一篇 » Spring Cloud 疑难杂症(7): Rabbitmq 只允许一个 callback

推荐阅读

Big Image