部署问题集合(二十三)设置Docker容器内的中文字符集,解决某些情况下中文乱码的问题

前言:

  • 同事给了一个服务,在Windows环境下怎么跑都正常,但一到Linux虚拟机里就中文乱码
  • 起初就想到了可能是字符集的问题,但调整了半天也没见效果,最后隔了几天突然想到,我是构建Docker跑的,而且基础镜像就是centos,封闭的环境下修改外部虚拟机的字符集肯定没作用啊,笨比
  • 然后就想到了进入容器内部,修改容器内部的字符集,果然就好了
  • 若要修改成其他字符集,同理可得(有没有感觉这句话莫名熟悉)

修改正在运行的Docker容器内的字符集

  • 先进入Docker容器:docker exec -it 容器ID /bin/bash
  • 查看是否支持中文字符集:locale -a | grep zh(PS:这一步如果之前没有特意下过,那么大概率就是没有,所以不用担心,继续老老实实下一步)
  • 下载中文字符集:yum install kde-l10n-Chinese -y
  • 设置名称:localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
  • 看看现在有没有:locale -alocale -a | grep zh
  • 把设置写到配置文件里:echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
  • 设置中文字符集:设置俩,第二步可能会报错,但我也不知道为啥报错了还能设置成功(-_-)
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
  • 查看是否修改成功:locale

若通过Dockerfile构建,想从源头开始设置

  • 修改Dockerfile中的内容,添加如下代码,然后重新构建即可
RUN yum install -y kde-l10n-Chinese && \
    localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && \
    echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf && \
    yum clean all

ENV LANG="zh_CN.UTF-8" \
    LC_ALL="zh_CN.UTF-8"

参考

  • CentOS7设置字符集为zh_CN.gbk
  • RHEL系列Docker镜像中GBK字符编码配置

你可能感兴趣的:(虚拟机部署问题,docker,容器,运维)