把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
最终的dockerfile配置
FROM centos-jdk:8u11 # 这个是自定义的镜像 LABEL xxx <xxx@qq.com> RUN wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm && rpm -Uvh epel-release-7-12.noarch.rpm && yum install -y cronolog && mkdir /usr/share/fonts RUN yum -y install kde-l10n-Chinese && yum -y reinstall glibc-common && localedef -c -f UTF-8 -i zh_CN zh_CN.UFT-8 && echo 'LANG="zh_CN.UFT-8"' > /etc/locale.conf && source /etc/locale.conf && yum clean all ENV LANG=zh_CN.UFT-8 LC_ALL=zh_CN.UFT-8 ADD simsun.ttc /usr/share/fonts ADD apache-tomcat-8.5.56.tar.gz /opt RUN ln -s /opt/apache-tomcat-8.5.56 /opt/tomcat
改之前查看系统字符集信息
[root@htbb-admin-84f9d548fb-6nv5s /]# locale LANG= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL= [root@htbb-admin-84f9d548fb-6nv5s /]#
改之后查看系统字符集信息
[root@htbb-admin-8d54f5c5f-cqhtm /]# locale -a C en_US.utf8 POSIX zh_CN.uft8 [root@htbb-admin-8d54f5c5f-cqhtm /]# locale LANG=zh_CN.UFT-8 LC_CTYPE="zh_CN.UFT-8" LC_NUMERIC="zh_CN.UFT-8" LC_TIME="zh_CN.UFT-8" LC_COLLATE="zh_CN.UFT-8" LC_MONETARY="zh_CN.UFT-8" LC_MESSAGES="zh_CN.UFT-8" LC_PAPER="zh_CN.UFT-8" LC_NAME="zh_CN.UFT-8" LC_ADDRESS="zh_CN.UFT-8" LC_TELEPHONE="zh_CN.UFT-8" LC_MEASUREMENT="zh_CN.UFT-8" LC_IDENTIFICATION="zh_CN.UFT-8" LC_ALL=zh_CN.UFT-8 [root@htbb-admin-8d54f5c5f-cqhtm /]# cat /etc/locale.conf LANG="zh_CN.UFT-8" [root@htbb-admin-8d54f5c5f-cqhtm /]#
说明
Linux系统默认使用英文字符集,不会安装中文字符集等其他字符。
查看当前字符集
$ echo $LANG
en_US.UTF-8
安装字符集
使用locale命令看看当前系统所使用的字符集
$ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
查看系统是否安装中文字符集支持
# locale -a | grep CN bo_CN bo_CN.utf8 ug_CNug_CN.utf8 zh_CNzh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8
若没有执行以下命令进行安装
#CentOS6.x: yum groupinstall chinese-support #CentOS7.x yum install -y kde-l10n-Chinese yum reinstall -y glibc-common #定义字符集 localedef -c -f UTF-8 -i zh_CN zh_CN.UFT-8 #确认载入成功 locale -a
修改系统字符集
修改系统字符集的配置文件:
-
Centos6.x字符集配置文件:/etc/sysconfig/i18n
-
Centos7.x字符集配置文件:/etc/locale.conf
# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf # source /etc/locale.conf
或者临时改变字符集:
LANG="<字符集>" LANG="zh_CN.UTF-8" #或者把字符集环境变量写到profile vim /etc/profile source /etc/profile
验证字符集修改
# echo $LANG zh_CN.UTF-8 # locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
修改ssh终端字符集
如果按照以上方法设置修改设置中文语言还是不行,注意SSH终端选择的编码,如xshell为例,把终端的编码选择中文,或者UTF8即可。
如果系统界面依然出现乱码,再安装以下包:
yum groupinstall "fonts" -y 如果还是乱码,进入fonts安装路径执行以下命令 [root@localhost ~]# cd /usr/share/fonts/ [root@localhost ~]# fc-cache -fv
容器环境配置字符集
以CentOS7容器镜像为例
查看默认配置
# docker run -it --rm centos sh sh-4.2# echo $LANG sh-4.2# locale LANG= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL= sh-4.2# locale -a C POSIX en_US.utf8
以配置zh_CN.GB18030字符集为例
yum install -y kde-l10n-Chinese yum reinstall -y glibc-common localedef -c -f GB18030 -i zh_CN zh_CN.GB18030 #验证成功加载中文语言包zh_CN.gb18030 # locale -a C POSIX en_US.utf8 zh_CN.gb18030
修改字符集配置
$ cat /etc/locale.conf LANG="en_US.UTF-8" $ echo 'LANG="zh_CN.GB18030"' > /etc/locale.conf && source /etc/locale.conf $ echo "export LC_ALL=zh_CN.GB18030" >> /etc/profile && source /etc/profile #验证配置生效 $ echo $LANG zh_CN.GB18030
Dockerfile示例:
docker容器环境需要基于dockerfile制作对应字符集镜像,追加以下内容到自定义dockerfile中:
# cat Dockerfile FROM centos LABEL Maintainer dockerhub.com RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum -y install kde-l10n-Chinese && yum -y reinstall glibc-common && localedef -c -f GB18030 -i zh_CN zh_CN.GB18030 && echo 'LANG="zh_CN.GB18030"' > /etc/locale.conf && source /etc/locale.conf && yum clean all ENV LANG=zh_CN.GB18030 LC_ALL=zh_CN.GB18030