当前位置: 首页 > article >正文

docker运行Java项目,Kaptcha因为字体缺失没法显示验证码图片

2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任,死磕!欢迎点赞、收藏、关注,更多分享请进我主页。

Java项目在开发主机以及宿主服务器,Kaptcha都可以正常显示验证码图片,而docker运行Java项目,Kaptcha会因为字体缺失而没法显示验证码图片,报错如下

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)
	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)

解决办法
在Dockerfile中添加字体的安装

RUN apk add --no-cache fontconfig ttf-dejavu

完整的Dockerfile

# 使用官方的OpenJDK镜像作为基础镜像
FROM openjdk:8-jre-alpine

# 安装 bash
RUN apk add --no-cache bash

# 安装字体和字体配置工具
RUN apk add --no-cache fontconfig ttf-dejavu

# 作者信息
LABEL maintainer="test@qq.com"

# 设定工作目录
WORKDIR /app

# 将JAR包复制到镜像中
COPY test-1.0.1.jar /app/test-1.0.1.jar

# 暴露应用的运行端口
EXPOSE 8080

# 运行JAR包
ENTRYPOINT ["java", "-jar", "test-1.0.1.jar"]

这样就能解决docker运行的项目Kaptcha没法显示验证码图片的问题了

推荐阅读

  1. 母婴商城系统架构与功能分析
  2. O2O同城系统架构与功能分析
  3. 对接苹果内购完整教程,从申请标识符到开发,上架审核(付uniapp、Java对接源码)

http://www.kler.cn/a/512609.html

相关文章:

  • Ubuntu cuda-cudnn中断安装如何卸载
  • 光谱相机在智能冰箱的应用原理与优势
  • Python绘制数据地图-MovingPandas
  • 在Windows/Linux/MacOS C++程序中打印崩溃调用栈和局部变量信息
  • 【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件
  • C++ 模拟真人鼠标轨迹算法 - 防止游戏检测
  • Spring Boot自动配置原理:如何实现零配置启动
  • STM32之CubeMX新建工程操作(十八)
  • npm的包管理
  • Redis Windows 解压版安装
  • AIGC视频生成模型:ByteDance的PixelDance模型
  • 51c~缺陷检测~合集2
  • CAN 网络介绍
  • mysql 如何清理磁盘碎片
  • 怎么使用langchain和ollama自己简单开发搭建一个本地有记忆的大模型?
  • LLM 的星辰大海:大语言模型的前世今生
  • Python毕业设计选题:基于django+vue的二手电子设备交易平台设计与开发
  • ServiceEntry 是一种用于将外部服务引入到Istio内部的服务注册表中的配置资源。
  • kafka学习笔记6 ACL权限 —— 筑梦之路
  • PC端自动化测试实战教程-1-pywinauto 环境搭建(详细教程)
  • 面试题-redis的大key与热key
  • 系统架构演进:从单体到微服务的智能转型
  • Spring boot启动原理及相关组件
  • 【机器学习实战中阶】使用Python和OpenCV进行手语识别
  • 欧拉(Euler 22.03)安装ProxySQL
  • Flutter项目和鸿蒙平台的通信