这几天本人使用docker-compose 容器编排工具重构公司的项目运维体系,大概部署了有二十来个微服务,全部都使用了docker容器进行部署,一切都运行正常.但是一个星期后发现部分微服务的日志里中文乱码,并且上传的中文数据也是出现了乱码的情况.这肯定是不能容忍的啊.然后开始逐渐去排查.
首先想到的就是docker容器的字符集有问题,因为docker容器都是阉割版的linux,很多的功能都是没有的,然后进入docker容器内部进行排查
#进入docker容器内部命令
docker exec -it -u root fc73b876a174 /bin/bash
然后我们使用locale 命令看下字符集
可以看到设置的字符集是POSIX,这肯定是不能识别中文的啊,那必须要改啊
怎么改呢,看了网上大量的文章,最后总结出来一个比较有效的方法,就是在docker-compose.yml文件中,对每个服务加上环境变量
我们指定使用英文的UTF-8,然后删除容器,再重新添加容器,并启动,再使用 locale 命令查看字符集
可以看到字符集变为英文的UTF-8
如果有些人没有en_US.UTF-8字符集就需要下载了,如何知道有没有呢,可以使用 locale -a查看一下
如果有人使用的是docker直接运行,而不是使用docker-compose的话,可以在启动的时候指定字符集即可
docker run -di -v XXX:XXX -e LANG=en_US.UTF-8 ....
然后我们开始访问项目,查看是否乱码
成功解决乱码问题.
到此如果有人出现了日志中文乱码正常了,但是传输的中文数据乱码的情况话,我建议你查一下微服务的网关docker容器是否也修改了字符集,网关如果忘记修改则会出现数据乱码的情况哦