localedef 生成本地化文件遇到的问题
问题描述
最近在做应用的信创国产化迁移适配,使用 OpenEuler 作为 docker 源镜像进行构建时,由于需要执行了 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 生成本地化文件,但报错 cannot read archive header。
Dockerfile 如下(精简后的 demo):
复制代码
错误分析
因为执行了 yum update 导致 glibc 升级了版本,然后默认生成了 /usr/lib/locale/locale-archive 文件,但生成的文件内容为空,导致格式不正确,localedef 命令执行时尝试去解析该文件,格式的问题导致报错。
经测试,发现 openeuler/openeuler:22.03 中默认是没有 /usr/lib/locale/locale-archive 文件的,但想 centos:centos7 中有默认的 locale-archive 文件,就不会存在此问题。
解决方式
在执行 localedef 命令之前删除掉空的文件 /usr/lib/locale/locale-archive 即可,新的 Dockerfile 文件如下:
复制代码
版权声明: 本文为 InfoQ 作者【程序员与厨子】的原创文章。
原文链接:【http://xie.infoq.cn/article/929ae901d1a1e20366fd220dc】。文章转载请联系作者。
评论