问题背景
最近的项目中使用到了工作流,集成的是Activiti,项目部署到生产环境之后,发现Activiti在生产环境生成的图片是乱码的情况,这个在dev,test环境均没有问题,生产环境使用的是PAAS平台,当然底层还是使用Docker镜像进行部署的,只是在上PAAS平台的时候,把测试环境的Dockerfile进行了一定的修改,问题就出现在生产环境的Docker镜像上了,那Docker环境下乱码的问题该如何解决呢?
废话不多说,直接上常用到的几种解决办法,这几招用上之后,基本上就搞定了~
解决办法
在Docker环境下工作流生成的图片乱码,一般情况下有以下几种解决办法:
Dockerfile底包有问题
检查Dockerfile底包,已踩坑使用oraclejdk有乱码,建议无特殊需求直接使用openjdk
缺少中文字体
一般Linux系统下都没有中文字体,可以看一下
/usr/share/fonts
目录,是否包含所需要的字体,若没有,则需要在Dockerfile里面加上Docker环境的字符集存在问题
使用
locale
检查下docker环境的字符集,我的Docker环境的字符集如下:# 列出运行中的docker 容器 [zkgc@tcosmapp02 ~]$ docker psCONTAINER ID IMAGE COMMAND 15139337e4ac mva-cloud/cloud-activiti:1.1.0-SNAPSHOT "java -jar /cloud-ac…" # 进入docker容器,并执行locale 查询字符集[zkgc@tcosmapp02 ~]$ sudo docker exec -it 15139337e4ac /bin/bashroot@15139337e4ac:/# localeLANG=C.UTF-8LANGUAGE=LC_CTYPE="C.UTF-8"LC_NUMERIC="C.UTF-8"LC_TIME="C.UTF-8"LC_COLLATE="C.UTF-8"LC_MONETARY="C.UTF-8"LC_MESSAGES="C.UTF-8"LC_PAPER="C.UTF-8"LC_NAME="C.UTF-8"LC_ADDRESS="C.UTF-8"LC_TELEPHONE="C.UTF-8"LC_MEASUREMENT="C.UTF-8"LC_IDENTIFICATION="C.UTF-8"LC_ALL=
如果你的不是,可以在Dockerfile里面使用
ENV
来指定成你需要的字符集
Dockerfile示例
FROM java:8# 将字体simsun.ttc 放到docker镜像的/usr/share/fonts目录下ADD simsun.ttc /usr/share/fonts/simsun.ttc# 指定docker镜像的字符集ENV LC_ALL=C.UTF-8ENV LANG=C.UTF-8ENV LANGUAGE=ADD cloud-activiti-1.1.0-SNAPSHOT.jar /app.jarENTRYPOINT ["java", "-jar","-Dspring.profiles.active=${profile}","/app.jar"]
觉得有用就顺手转发一下,右下角点个在看,非常感谢!
长按/扫码关注我吧,会找到你想要的……
喜欢就点个在看吧