本文最后更新于 969 天前,其中的信息可能已经有所发展或是发生改变。
Docker openjdk-alpine 无法使用字体控件(fontconfig)的坑
问题背景
因为最近公司的java微服务都到容器运行~某些服务使用了hutool
工具类提供Excel生成功能,今天测试在测试环境灰度测试时候,发现了空指针的错误:
而正常的开发环境暂时还是在宿主机用oralce jdk跑服务,未出现此问题。
问题分析及解决
问题分析
因为Java服务现在都是用openjdk:8-jdk-alpine
为基础镜像进行构建的,再通过看具体错误和经过一些google
,可以确定两个问题:
1.openjdk
不包括sum.awt
的字体控件
2.alpine linux
的基础镜像也未安装有fontconfig
和ttf-dejavu
字体。
解决
- 将
openjdk:8-jdk-alpine
更换成oraclejdk
或者使用openjdk:8-jdk
。但考虑到商业授权的问题,因此不更换,仍使用openjdk
,但又因为alpine
基础镜像已经是最小了,所以折中继续使用openjdk:8-jdk-alpine
- 在
dockerfile
构建文件中,安装fontconfig 和 ttf-dejavu
字体
最终方案是在
openjdk:8-jdk-alpine
基础镜像中再封装私有的镜像原因是Jenkins流水线上每次打包构建镜像都要 apk
fontconfig和ttf-dejavu
,构建过程非常慢!!!!