1.问题复现

在开发时本地使用oraclejdk开发,可正常显示验证码,使用docker打包时,为了降低包大小,切换为openjdk,上线后发现验证码无法正常显示,且后台显示以下异常:

java.lang.NullPointerException: nullat 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)at java.security.AccessController.doPrivileged(Native Method)at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)at java.awt.Font.getFont2D(Font.java:491)at java.awt.Font.access$000(Font.java:224)at java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)at sun.font.FontUtilities.getFont2D(FontUtilities.java:180)at sun.font.StandardGlyphVector.initFontData(StandardGlyphVector.java:1126)at sun.font.StandardGlyphVector.init(StandardGlyphVector.java:1115)at sun.font.StandardGlyphVector.<init>(StandardGlyphVector.java:167)at java.awt.Font.createGlyphVector(Font.java:2545)at com.google.code.kaptcha.text.impl.DefaultWordRenderer.renderWord(DefaultWordRenderer.java:66)at com.google.code.kaptcha.impl.DefaultKaptcha.createImage(DefaultKaptcha.java:43)

2.问题原因:

因为openjdk:8-jre-alpine中缺少FontConfiguration

3.解决方案:

3.1.项目运行在linux中,则需要安装对应的组件

yum install fontconfig

3.2.项目打包在docker中运行

添加:在docker镜像中安装 ttf-dejavu软件,若验证码中使用了特殊的字体,则需要安装对应字体或使用其他jdk

更新前Dockerfile文件

#运行此项目基于openjdk镜像
FROM openjdk:8-jre-alpine
#设置容器时间与宿主时间一致
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneADD *.jar app.jarENTRYPOINT exec java $JAVA_OPTS   -Djava.security.egd=file:/dev/./urandom  -jar /app.jar

更新后Dockerfile文件

#运行此项目基于openjdk镜像
FROM openjdk:8-jre-alpine
#设置容器时间与宿主时间一致
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig
ADD *.jar app.jarENTRYPOINT exec java $JAVA_OPTS   -Djava.security.egd=file:/dev/./urandom  -jar /auth-server.jar

3.3 编排文件中安装fontconfig

#运行此项目基于openjdk镜像
FROM openjdk:8-jre-alpine#安装fontconfig插件
yum install fontconfig
fc-ache --force#设置容器时间与宿主时间一致
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneENTRYPOINT exec java $JAVA_OPTS   -Djava.security.egd=file:/dev/./urandom  -jar /auth-server.jar

Docker 使用OpenJDK 验证码无法显示相关推荐

  1. .NET 6 WTM layui发布到centos7,验证码不显示问题解决办法

    一.原因 为了更好的支持跨平台.NET 6框架放弃了原来的System.Drawing绘图的支持,转而使用第三方的SixLabors这个绘图库. 如果使用的wtm是.NET5及以下的请参照文章(14条 ...

  2. ThInkPHP验证码不显示,解决方法汇总

    出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查: ① PHP是否已经安装GD库支持: ② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文 ...

  3. 无法显示验证码去掉html,后台登陆验证码无法显示

    请问网站后台管理员登陆验证码无法显示怎么解决网站LOGIN.ASP代码是 管理员登录 管理员登录 用户名称: 用户密码: 验 证 码:

  4. ThinkPHP5验证码不显示的原因及解决方法

    ThinkPHP5验证码不显示的原因及解决方法 参考文章: (1)ThinkPHP5验证码不显示的原因及解决方法 (2)https://www.cnblogs.com/shengxihui/p/112 ...

  5. dede 验证码不显示 vdimgck.php,Dede后台验证码不显示解决方法详解(dedecms 5.7)

    本地与服务器上安装了dedecms5.7无法显示验证码,一般这种情况很少见,一般情况就是服务器设置问题,还有临时目录的权限问题. Dede后台验证码不显示或不正常分三种情况,下面来逐一分析 Dede后 ...

  6. startsBBS在nginx环境下的部署,出现布局错误和验证码不能显示的解决方法

    问题:提示404 原因:没有配置url重写 解决:nginx 不支持pathinfo 模式 需要修改配置,方法如下 STB配置 打开 STB 的 config.php 文件修改如下: $config[ ...

  7. linux+tomcat+jdk环境验证码无法显示

    我的环境配置:RHEL6.5+tomcat6+jdk1.6 今天遇到一个奇怪的现象,我的tomcat启动起来之后,网站无法显示验证码,导致无法登陆.我的tomcat启动过程是这样的: 我有一个进程守护 ...

  8. ThinkPHP验证码不能显示如何解决

    ThinkPHP验证码不能显示如何解决 ThinkPHP自带验证码的函数类,存放路径为:ThinkPHP/Lib/ORG/Util/验证码类 使用的时候只需在Index控制器中引入,方法如下: pub ...

  9. ie浏览器框架不显示_thinkphp框架下后台验证码不显示

    刚刚在搭建网站遇到thinkphp框架下一个网站后台验证码无法显示,经过百度,谷歌研究,最后群求官方帮助文件发现是 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文件为乱码 ...

最新文章

  1. 准确理解 Precision 准确率, Recall 召回率 , IoU
  2. spring核心文件配置头
  3. 文献记录(part63)--跨模态社交图像聚类
  4. 解决:DuplicateMappingException: Table [xx] contains physical column name referred to by multiple ... .
  5. 干货|MIT线性代数课程精细笔记5
  6. FZOJβ #31.字符串
  7. [上架] iOS 上架更新版本号建议
  8. LeetCode-652. 寻找重复的子树
  9. html增删改查按钮控件,HTML DOM节点的增删改查
  10. 在Windows下搭建RocketMQ
  11. kettle连接ACCESS数据库
  12. Java中this的应用
  13. S变化广义s变化和时频域特征-matlab
  14. DC Administration Services 宣布ISDA裁决委员会2021年申请流程
  15. ChatGPT 之父传奇:8岁学编程,16岁出柜,37岁颠覆科技圈,网友:“天选 CEO!”...
  16. linux一些简单的操作命令
  17. 100条信号完整性效应的经验法则
  18. 三大运营商(联通、电信、移动)的手机号正则判断
  19. java常用文件工具类
  20. 巨头王炸不断,硬核解读芯片技术路线

热门文章

  1. HDFS加密存储(Ranger集成KMS方式)
  2. python编程课程-天津Python编程课程
  3. python身份证号码共18位_18位身份证校验
  4. 前端-查询参考资料网站/软件/移动端、jQuery开发插件官网
  5. Windows 11系统IDEA启动时报错:Cannot find keymap “Windows copy” 解决办法
  6. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片...
  7. 计算机图像抠图有什么作用,电脑图片抠图怎么弄,如何在电脑上把图片里的某一部分抠出来...
  8. OSPF单区域配置【eNSP实现】
  9. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:05 特征工程和NLP算法
  10. Android如何判断系统是否已经被Root