如何解决 Docker容器中文乱码?
2017-07-25 by dongnan
问题描述
某项目使用 tomcat
容器,发现业务日志文件内的中文会出现乱码,例如:
tail logs
com.zongming.net.scf.security4.CustomAuthenticationSuccessHandler.onAuthenticationSuccess(77) | ????? dongnan
错误原因
未知,没有检索到 C.UTF-8
与 en_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