Docker制作支持中文的Centos7镜像

初试生成镜像

        在第一版Dockerfile中,按照了glibc-common,设置了中文环境变量:


    
    
  1. FROM centos: 7
  2. RUN yum update -y & & \
  3. yum reinstall -y glibc-common
  4. ENV LANG =zh_CN.UTF- 8 \
  5. LANGUAGE =zh_CN:zh \
  6. LC_ ALL =zh_CN.UTF- 8
  7. ....

原本在一般服务器上设置了环境变量就OK了,结果这次在登录进容器的时候,出现了如下警告:

bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)
    
    

同时,在使用locale -a命令时,会有如下提示:


    
    
  1. locale: Cannot set LC_CTYPE to zh_CN.UTF- 8: No such file or directory
  2. locale: Cannot set LC_MESSAGES to zh_CN.UTF- 8: No such file or directory
  3. locale: Cannot set LC_COLLATE to zh_CN.UTF- 8: No such file or directory
  4. POSIX
  5. C

看提示信息,应该是缺少相应支持的locale文件(网上也有很多说法,比如要安装chinese-support、Font、kde-l10n-Chinese等,这些在Centos7上都不好使)。

对locale的说明

        这个要从系统locale的设定说起,locale直接翻译是地域的意思,它是根据计算机用户所使用的语言,所在的国家或地区,以及当地的文化传统所定义的一个软件运行时的语言环境。locale组成包括语言(Language), 地域 (Territory) 和字符集(Codeset),它的书写方式是“语言_地域.字符集”,例如:zh_CN.UTF-8,指语言为中文,地域为中华人民共和国,使用UTF-8字符集。

        locale的定义文件放在/usr/share/i18n/locales目录下面,这些文件都是文本格式的,可以直接查看,比如,zh_CN文件的内容是这样的:


    
    
  1. comment_char %
  2. escape_char /
  3. %
  4. % Chinese language locale for the Peoples Republic of China
  5. %
  6. % This work is based on ISO PDTR 14652, Unicode 3.0, locale definition
  7. % file for zh_CN revision 1.0 (hashao@china.com, 1999- 04- 28) and
  8. % charmap file for GBK version 1.0 (sean.chen@turbolinux.com).
  9. %
  10. % The file is designed to work with multiple charsets. To ease the
  11. % maintance and adding support for new charsets, all characters are
  12. % in UCS notation and presented in Unicode order.
  13. %
  14. % Changelog:
  15. % Tue Jul 25 2000 Yong Li <rigel 863@hotmail.com >
  16. % - first version for glibc 2.2
  17. LC_ IDENTIFICATION
  18. title "Chinese locale for Peoples Republic of China"
  19. source ""
  20. address ""
  21. contact ""
  22. email "bug-glibc-locales@gnu.org"
  23. tel ""
  24. fax ""
  25. language "Chinese"
  26. territory "P.R. of China"
  27. revision "0.1"
  28. date "2000-07-25"
  29. %
  30. category "zh_CN:2000";LC_ IDENTIFICATION
  31. category "zh_CN:2000";LC_CTYPE
  32. category "zh_CN:2000";LC_COLLATE
  33. category "zh_CN:2000";LC_ TIME
  34. category "zh_CN:2000";LC_ NUMERIC
  35. category "zh_CN:2000";LC_MONETARY

这里面的文件对应的是locale定义中“.”之前的部分,也就是区域和语言,后半部分字符集映射信息位于/usr/share/i18n/charmaps目录中,也可以通过“locale -m”命令来查看。当然,这些并不是系统中能用的字符集,只能算是可用的字符集。由于Linux中包含的字符集和语言种类很多,而用户一般用到的很有限,没必要把所有的都集成到系统里。如果需要使用某种字符集和语言,需要使用/usr/share/i18n中的原始文件进行定义,类似于编译的过程,定义完的语言环境文件存放在/usr/lib/locale/locale-archive中。

        定义语言环境可以使用localedef命令,比如定义zh_CN.UTF-8,则可以使用:

localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
    
    

另外,localedef的完整帮助说明如下:


    
    
  1. [root]# localedef --help
  2. 用法: localedef [选项...] 名称
  3. 或: localedef [选项...]
  4. [ --add-to-archive|--delete-from-archive] 文件...
  5. 或: localedef [选项...] --list-archive [文件]
  6. 编译区域规范
  7. 输入文件:
  8. -f, --charmap=FILE Symbolic character names defined in FILE
  9. -i, --inputfile=FILE 在 FILE 中找到源定义
  10. -u, --repertoire-map=FILE FILE contains mapping from symbolic names to UCS4
  11. values
  12. 输出控制:
  13. -c, --force 即使出现警告消息也创建输出
  14. --old-style 创建旧风格表格
  15. --posix 严格遵循 POSIX
  16. --prefix=PATH 可选的输出文件前缀
  17. --quiet 关闭警告和信息消息
  18. -v, --verbose 打印更多消息
  19. 归档控制:
  20. --add-to-archive
  21. 将由参数命名的区域添加到归档文件中
  22. -A, --alias-file=FILE 在制作归档文件时参考 locale.alias
  23. 文件
  24. --delete-from-archive 从归档文件中删除由参数命名的区域
  25. --list-archive 列出归档文件的内容
  26. --no-archive 不要将新数据添加到归档文件中
  27. --replace 替换现有的归档文件内容
  28. -?, --help 给出该系统求助列表
  29. --usage 给出简要的用法信息
  30. -V, --version 打印程序版本号
  31. 长选项的强制或可选参数对对应的短选项也是强制或可选的。
  32. System 's directory for character maps : /usr/share/i18n/charmaps
  33. repertoire maps: /usr/share/i18n/repertoiremaps
  34. locale path : /usr/lib/locale:/usr/share/i18n
  35. For bug reporting instructions, please see:
  36. <http://www.gnu.org/software/libc/bugs.html>.

完整Dockerfile

        至此,可以基于以上方法,制作一个支持中文环境的Centos7镜像,完成的Dockerfile如下:


    
    
  1. FROM centos: 7
  2. ENV LANG =zh_CN.UTF- 8 \
  3. LANGUAGE =zh_CN:zh \
  4. LC_ ALL =zh_CN.UTF- 8
  5. # Install tools
  6. RUN yum update -y & & \
  7. yum reinstall -y glibc-common & & \
  8. yum install -y telnet net-tools & & \
  9. yum clean all & & \
  10. rm - rf /tmp / * rm - rf /var /cache /yum / * & &
  11. localedef -c -f UTF- 8 -i zh_CN zh_CN.UTF- 8 & & \
  12. ln -sf /usr /share /zoneinfo /Asia /Shanghai /etc /localtime
  13. # Define default command.
  14. CMD [ "bash"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值