最近遇到Devops部署war到Tomcat中文乱码问题,Java生成的二维码图片,部署后中文变成了方格,如下:
这是因为生成二维码图片时指定了字体,如微软雅黑,但容器里面没有该字体导致,需要在dockerfile里面引入需要的字体,参考示例:
FROM tomcat(声明tomcat镜像版本)
WORKDIR /home(设置工作路径)
COPY ./target/demo.war /usr/local/tomcat/webapps/demo.war(拷贝war包到目标路径)
RUN ln -s /nfs-data/file /usr/loacl/tomcat/webapps(建立软连接,按需使用该命令)
COPY ./fonts/msyh.ttc /usr/lib/jvm/java-1.8.0/jre/lib/fonts/msyh.ttc(引入字体到jre目录)
ENV LANG zh_CN.utf8(指定字符集)
注意:需要在SpringBoot项目中创建和target同级的fonts目录,放需要的字体,这样dockerfile在构建的时候copy到运行的jre目录,就能使用了,该dockerfile适用于devops部署,如只使用docker部署,可以直接将需要的字体,上传到容器的jre/fonts目录,再重启应用即可生效
查看Linux jdk运行目录命令
echo $JAVA_HOME
Docker命令详解
FROM :定制的镜像基于哪个镜像
MAINTAINER:作者信息
WORKDIR:设置工作路径
COPY:复制文件到容器
ADD:复制文件同时解压或执行
ENV:设置环境变量
EXPOSE:设置暴露哪个端口给宿主机
RUN:执行后面的命令,作用于镜像层,镜像构建时就执行;dockerfile 中有多条时,都会执行;
ENTRYPOINT:执行后面的命令,作用于容器层,容器启动时执行;dockerfile 中有多条时,只会执行最后一条;
CMD:执行后面的命令,作用于容器层,容器启动时执行;dockerfile 中有多条时,只会执行最后一条;允许被修改;