环境
FROM openresty/openresty:centos7
此centos集成了nginx的配置。
问题
Java服务启动后日志输出如下:
问题查看
执行locale -a命令,发现不支持zh_CN.utf8字符集。
问题解决
方式一:
- yum install kde-l10n-Chinese -y 安装语言包(针对centos 7)
- yum reinstall glibc-common -y 更新gitbc 包
- localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 (设置系统语言包)
- vim /etc/locale.conf 添加:LANG=“zh_CN.UTF-8”
如果执行命令时,报出Failed to set locale, defaulting to C错误,是由于没有设置正确的语言环境。
可设置语言环境:
echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
source /etc/profile
方式二:
经过方式一解决过后,发现虽然系统可以支持输入输出中文了,但是控制台日志中文输出还是乱码。
所以为了从根源上解决问题,还是要重构Dockerfile文件,不通过后天修改容器,让其镜像天生自带中文支持。
Dockerfile添加如下内容:
#设置系统编码
RUN yum install kde-l10n-Chinese -y
RUN yum install glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8
添加以上内容后,构建出来的镜像支持中文,日志输出也正常了。
中文编码解决了,但是运行时发现时间慢了八个小时。
本次依旧从Dockerfile入手解决,添加一下内容即可:
#定义时区参数
ENV TZ=Asia/Shanghai
#设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
当然除此之外还有很多解决时区的方法,通过容器卷或者拷贝均可实现。