解决alpine镜像运行springboot 无法获取验证码(缺少字体)的问题
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)
at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
at sun.font.SunFontManager$2.run(SunFontManager.java:431)
at java.security.AccessController.doPrivileged(Native Method)
at sun.font.SunFontManager.<init>(SunFontManager.java:376)
at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
重新制作jdk镜像,添加fontconfig和一款字体dejavu,文件名称Dockerfile-8u201_jdk_alpine3.9
FROM openjdk:8u201-jdk-alpine3.9
ENV LANG en_US.UTF-8
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
编译命令:
docker build -f Dockerfile-8u201_jdk_alpine3.9 -t openjdk-font:8u201-jdk-alpine3.9 .
推送到自己的docker仓库或者中央仓库:
//登录
docker login
Username:输入账号
Password:输入密码
//登录成功推送:这里如果是自己的服务器,要根据自己服务器重新打tag再推送
//比如服务器是hub.yexuejc.top
docker tag openjdk-font:8u201-jdk-alpine3.9 hub.yexuejc.top/public/openjdk-font:8u201-jdk-alpine3.9
docker push openjdk-font:8u201-jdk-alpine3.9(或者hub.yexuejc.top/public/openjdk-font:8u201-jdk-alpine3.9)