解决 alpine 镜像运行 springboot 无法获取验证码(缺少字体)的问题

夜雪剑辰[yexuejc] 的个人博客 记录精彩的程序人生 本文由博客端 https://blog.yexuejc.top 主动推送

解决 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)
  • 一些有用的避坑指南。

    62 引用 • 87 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    368 引用 • 826 回帖 • 439 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2812 引用 • 8043 回帖 • 749 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...