解决 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)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于