CentOS7及Docker配置中文字符集问题   把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。

把应用程序跑到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命令看看当前系统所使用的字符集
 
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
$ 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=
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
查看系统是否安装中文字符集支持
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
若没有执行以下命令进行安装
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
#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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
修改系统字符集
修改系统字符集的配置文件:
  • Centos6.x字符集配置文件:
    /etc/sysconfig/i18n
  • Centos7.x字符集配置文件:
    /etc/locale.conf
# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
# source /etc/locale.conf

或者临时改变字符集:

CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
LANG="<字符集>"
LANG="zh_CN.UTF-8"

#或者把字符集环境变量写到profile
vim /etc/profile
source /etc/profile
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
验证字符集修改
 
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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=
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
修改ssh终端字符集
如果按照以上方法设置修改设置中文语言还是不行,注意SSH终端选择的编码,如xshell为例,把终端的编码选择中文,或者UTF8即可。
如果系统界面依然出现乱码,再安装以下包:
yum groupinstall "fonts" -y

如果还是乱码,进入fonts安装路径执行以下命令
[root@localhost ~]# cd /usr/share/fonts/
[root@localhost ~]# fc-cache -fv

容器环境配置字符集

以CentOS7容器镜像为例
查看默认配置
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
以配置zh_CN.GB18030字符集为例
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
修改字符集配置
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
$ 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
Dockerfile示例:
docker容器环境需要基于dockerfile制作对应字符集镜像,追加以下内容到自定义dockerfile中:
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。

说明

Linux系统默认使用英文字符集,不会安装中文字符集等其他字符。
查看当前字符集
$ echo $LANG
en_US.UTF-8
安装字符集
使用locale命令看看当前系统所使用的字符集
 
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
$ 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=
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
查看系统是否安装中文字符集支持
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
若没有执行以下命令进行安装
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
#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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
修改系统字符集
修改系统字符集的配置文件:
  • Centos6.x字符集配置文件:
    /etc/sysconfig/i18n
  • Centos7.x字符集配置文件:
    /etc/locale.conf
# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
# source /etc/locale.conf

或者临时改变字符集:

CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
LANG="<字符集>"
LANG="zh_CN.UTF-8"

#或者把字符集环境变量写到profile
vim /etc/profile
source /etc/profile
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
验证字符集修改
 
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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=
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
修改ssh终端字符集
如果按照以上方法设置修改设置中文语言还是不行,注意SSH终端选择的编码,如xshell为例,把终端的编码选择中文,或者UTF8即可。
如果系统界面依然出现乱码,再安装以下包:
yum groupinstall "fonts" -y

如果还是乱码,进入fonts安装路径执行以下命令
[root@localhost ~]# cd /usr/share/fonts/
[root@localhost ~]# fc-cache -fv

容器环境配置字符集

以CentOS7容器镜像为例
查看默认配置
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
以配置zh_CN.GB18030字符集为例
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
修改字符集配置
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
$ 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
Dockerfile示例:
docker容器环境需要基于dockerfile制作对应字符集镜像,追加以下内容到自定义dockerfile中:
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。
# 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
CentOS7及Docker配置中文字符集问题
 
把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。