解决docker alpine缺少字体的问题
最近一个项目是用 Rancher 统一部署 , 所有程序均在 Docker 环境下运行 . 其中 Java 底包用的 Alpine , 但是 Alpine 没有自带默认字体 , 造成了一些问题 , 现记录解决方案.
Issue
遇到的问题是在后台管理系统中导出 Excel 时报空指针 java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
循着调用栈追踪问题 ,发现问题出在 Excel 组件上. Excel 组件试图根据字体大小自动调整单元格宽度 , 当寻找 fontconfig
时找不到, 返回 null .
复制以上报错谷歌 , 可以看到很多 Issue , 可以发现是 Alpine环境缺少对应的包 , 此问题影响所有官方 Alpine 的Java环境.
解决方案
1.
在项目的 Dockerfile 中进行修改 , 增加以下内容
1 | ENV LANG en_US.UTF-8RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* |
通过添加 fontconfig 和一款字体 dejavu , 可以完美解决问题 . 缺点是每次打包都要安装 ttf-dejavu 比较慢 , 因此该方法不推荐 .
2.
最好的方法是直接使用打包好的镜像
1 | FROM frolvlad/alpine-java:jdk8-slim |
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Halcyon Days!