docker部署 spring-boot 项目,验证码获取报错的解决方法

问题描述

在 docker 部署 spring-boot 项目后,启动项目时,验证码获取报错:

2020-10-21 16:13:03.603 ERROR 9 --- [ XNIO-1 task-2] c.e.c.s.handler.GlobalExceptionHandler : 全局异常信息 ex=null

java.lang.NullPointerException: null
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.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:670)
at sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:831)
at sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:50)
at sun.java2d.pipe.ValidatePipe.drawString(ValidatePipe.java:165)
at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2926)
at cn.hutool.core.img.GraphicsUtil.drawString(GraphicsUtil.java:113)
at cn.hutool.core.img.GraphicsUtil.drawStringColourful(GraphicsUtil.java:77)
at cn.hutool.captcha.LineCaptcha.drawString(LineCaptcha.java:75)
at cn.hutool.captcha.LineCaptcha.createImage(LineCaptcha.java:58)
at cn.hutool.captcha.AbstractCaptcha.createCode(AbstractCaptcha.java:102)
at cn.hutool.captcha.AbstractCaptcha.getCode(AbstractCaptcha.java:126)
at com.entfrm.auth.controller.CaptchaController.randomImage(CaptchaController.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

解决方案:

经过查询,应该是字体环境问题,需要在DockerFile加上apk add --update ttf-dejavu fontconfig

添加后的DockerFile(示例)如下:

FROM openjdk:8-jdk-alpine

MAINTAINER cat

RUN mkdir -p /demo/springboot/logs \
    /demo/springboot/temp \
    /demo/skywalking/agent &&\
   sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
   apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

WORKDIR /demo/springboot

ENV SERVER_PORT=9217

EXPOSE ${SERVER_PORT}

ADD /demo-springboot.jar app.jar

ENTRYPOINT ["java", \
            "-Djava.security.egd=file:/dev/./urandom", \
            "-Dserver.port=${SERVER_PORT}", \
#            "-Dskywalking.agent.service_name=demo-springboot", \
#            "-javaagent:/demo/skywalking/agent/skywalking-agent.jar", \
            "-jar", "app.jar"]

重新制作镜像,并运行,问题解决!

总结

以上就是今天要讲的内容,本文仅仅对docker部署 spring-boot项目,验证码获取报错的解决方法,希望能给大家一个参考,若有错误及不足之处请在下方评论留言

⭕关注博主,不迷路 ⭕

创作不易,关注💖、点赞👍、收藏🎉就是对作者最大的鼓励👏,欢迎在下方评论留言🧐