跳转至

如何解决 Docker容器中文乱码?


2017-07-25 by dongnan

问题描述

某项目使用 tomcat容器,发现业务日志文件内的中文会出现乱码,例如:

tail logs
com.zongming.net.scf.security4.CustomAuthenticationSuccessHandler.onAuthenticationSuccess(77) | ????? dongnan

错误原因

未知,没有检索到 C.UTF-8en_US.UTF-8 两个字符集之间的区别,但是使用 C.UTF-8 字符集,能够解决乱码问题。

环境

软件版本
tomcat:9 
Docker 1.13.1

字符集
自定义镜像 Dockerfile 文件,已指定 ENV LANG=en_US.UTF-8 字符集。
grep -i 'LANG' Dockerfile

ENV LANG=en_US.UTF-8

解决方法

设置 Dockerfile 文件,字符集为 C.UTF-8 并重新创建镜像与容器即可。

设置C.UTF-8字符集

grep -i 'LANG' Dockerfile

ENV LANG C.UTF-8

创建镜像

docker build -t myImage .

创建容器

docker run -tid --name myContainer myImage
docker exec -ti myContainer /bin/bash

验证

容器内的字符集

locale

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
# ...省略
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

再次查看日志

tail logs
com.zongming.net.scf.security4.CustomAuthenticationSuccessHandler.onAuthenticationSuccess(77) | 登陆用户:dongnan

欢迎关注微信公众号: 运维录

Back to top