• 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    解决方案:

    经过查询,应该是字体环境问题,需要在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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    总结

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

    ⭕关注博主,不迷路 ⭕

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

  • 相关阅读:
    React Context defaultValue 有什么用
    【Unity程序技巧】Unity中的单例模式的运用
    王道机试C++第 4 章 字符串:字符串内容续写几个小程序 Day30
    Spring Data JPA之Spring boot整合JPA进行CRUD
    新零售系统平台解决方案 线上线下小程序怎么做
    只需五步,在Linux安装chrome及chromedriver(CentOS)
    如何让ChatGPT生成Midjourney提示词
    贪心算法:猫粮兑换最大数量的五香豆
    Docker容器迁移新服务器
    百度竞价 - 百度单页竞价推广项目实操教程分享
  • 原文地址:https://blog.csdn.net/qq_34383510/article/details/133784176