odoo的docker容器内部不支持中文解决方案

原因:docker容器中设置编码是 POSIX 不支持中文 需要设置为UTF-8 就可以支持中文了。已知能用的utf8编码有:

en_US.UTF-8
C.UTF-8
zh_CN.UTF-8

解决:

1.临时:进入docker容器 在 /etc/profile 末尾添加 expor tLANG="C.UTF-8"  保存后执行 source /etc/profile 生效

2.永久:dockerfile中添加 ENV LANG C.UTF-8 或者安装 zh_CN.UTF-8

RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8

解决过程详解:

首先查看系统使用的编码方式。

locale

结果输出如下

LANG=
LANGUAGE=
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=

使用的是POSIX字符集,POSIX字符集是不支持中文的,因此程序出现错误。
再看一下系统自带了哪些字符集。

locale -a

结果如下 

C
C.UTF-8
POSIX

实际上linux字符集中支持中文且用的最多的应该是zh_CN.utf8字符集,不过幸运的是,C.UTF-8也是支持中文的,不然我们就必须手动安装其他支持中文的字符集了。
将系统字符集改为C.UTF-8, 只要把系统中的环境 LANG 改为"C.UTF-8"格式就可以了,这里采用最简单的方法,修改/etc/profile 文件, 并将export LANG="C.UTF-8"加到最后一行。

vi /etc/profile
# 然后将export LANG="C.UTF-8"加到最后一行
# 然后重新加载
source /etc/profile

再来看一下系统所用的字符集

locale
 
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

这就说明了修改成功,可以在docker容器中使用中文了。 

我这里将编码改成 zh_CN.UTF-8,这样对中国人更友好,改完后vim的提示都变成中文了。其他utf-8的在vim上提示还是英文的

问题在于平时基于docker原镜像生成容器时总不可能这么改得,必须在Dockerfile中指定字符集。实际上也很简单,在Dockerfile中加上一行

FROM odoo
# 加上下面这一行
ENV LANG C.UTF-8

或者两行

RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8

这是关键的代码地方,以防不会,我把自己odoo所用的完整的dockerfile代码放这里看看

FROM    hjdhnx/odoo:0507
MAINTAINER      Fisher "dashenhan hjdhnx"
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8
CMD /etc/autostart/auto_service.sh

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值