===============
常见错误,应用无法显示验证码
java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion 验证码无法显示
在Docker运行
Alpine 系统:
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories apk add fontconfig apk add --update ttf-dejavu fc-cache --force
===============
➜ 方案2:
项目采用docker进行构建运行,如果每次都需要重新安装此组件,很耗时。
采取另一种措施:重新构建一个基础镜像(安装好依赖,用于支持验证码功能)。
后续其他镜像基于此基础镜像做构建。
参考Dockerfile如下:
vim Dockerfile
Dockerfile内容如下:
FROM openjdk:8-alpine #ADD ./test.jar /opt/App/test.jar #拷贝字体文件 #COPY ./simhei.ttf /usr/share/fonts/simhei.ttf #设置字符集 ENV LANG en_US.UTF-8 # RUN apk --update add font-config ttf-dejavu # RUN rum -rf /var/cache/apk/* RUN sed -i '3s/#//' /etc/apk/repositories RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories RUN apk add --update --no-cache ttf-dejavu fontconfig && rm -rf /var/cache/apk/* EXPOSE 8080 ENTRYPOINT ["java", "-jar"] CMD ["test.jar"]
当前目录构建:
docker build -t myjava .
后续业务镜像基于新的基础镜像构建:
# FROM openjdk:8-jdk-alpine
FROM myjava
ADD *.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/app.jar"]
EXPOSE 8080
===============
#Dockerfile
From openjdk:13-jdk-alpine
#设置字符集
ENV LANG en_US.UTF-8
# RUN apk --update add font-config ttf-dejavu
# RUN rum -rf /var/cache/apk/*
RUN sed -i '3s/#//' /etc/apk/repositories
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --update --no-cache ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
CMD ["/bin/sh"]
#编译模板
docker build -t myjava:11 -f ./Dockerfile .
#运行服务
#docker stop api
#docker rm api
docker run -itd --restart=unless-stopped --name api -v $(pwd):/app -p 8081:8081 apnode/apnode:jdk8 java -jar /app/api.jar --spring.profiles.active=prod --server.port=8081
参考:
https://markix.blog.csdn.net/article/details/106470920
https://blog.csdn.net/jeikerxiao/article/details/109334619