前言

原本已经在虚拟机中安装了CentOS8虚拟机,现在想在docker中也升级到CentOS8容器(原本是7),本文是以Dockerfile的方式来构建镜像(不推荐基于容器来构建镜像),所以最终是要完成编写Dockerfile。既然CentOS官方有出官方镜像当然简单改改就能跑起来了,但是在启动程序上遇到了中文乱码的问题,源于官方镜像不支持中文。

实现

首先需要设置 LANG 环境变量才能实现中文环境,即:

$locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
......
$export LANG=zh_CN.utf8
$locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
......

但是只设置LANG环境变量没有安装中文字符集并不能直接支持中文从而出现了乱码,然后按照网络上帮助安装 langpacks-zh_CN 包发现也无法支持中文。然后在虚拟机正常CentOS8系统中根据 strace locale 查看调用得到结论:需要有/usr/lib/locale/zh_CN*目录才能支持中文,进一步查看系统包:
rpm -qa|grep langpack 查出了两个中文支持包:

  • glibc-langpack-zh-2.28-164.el8.x86_64
  • langpacks-zh_CN-1.0-12.el8.noarch
$rpm -ql langpacks-zh_CN-1.0-12.el8.noarch
/usr/share/metainfo/org.fedoraproject.LangPack-zh_CN.metainfo.xml
$rpm -ql glibc-langpack-zh-2.28-164.el8.x86_64
/usr/lib/locale
/usr/lib/locale/zh_CN
/usr/lib/locale/zh_CN.gb18030
......

可以看出来关键在于安装 glibc-langpack-zh 包才能有 /usr/lib/locale/zh_CN 目录,所以得到最终的Dockerfile关键行:

FROM centos:centos8.4.2105
RUN yum -y install langpacks-zh_CN glibc-langpack-zh && \
	yum clean all
ENV LANG zh_CN.utf8
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐