操作系统版本:Ubuntu 22.04.5 LTS
Docker版本:Docker Engine - Community 28.0.1
Tomcat 版本:apache-tomcat-8.5.93
存在中乱码的日志信息如下图:
上图中,“???????????”中文显示成了乱码。
(1)查看当前容器支持的编码格式,如下:
root@lc5i3z3wbje3:/var/data/hxstrive-8081# docker exec -it 8eb7c906cc34 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 编码是不支持中文的,所以显示乱码。
(2)重新创建容器,并且通过 -e LANG="C.UTF-8" 参数设置 LANG 环境变量值为 C.UTF-8,如下:
docker run -d --name tomcat8 -e LANG="C.UTF-8" -p 8080:8080 -v /etc/localtime:/etc/localtime:ro -v /var/data/tomcat8/logs:/opt/apache-tomcat-8.5.93/logs tomcat8
执行完上面命令,再次使用 docker exec -it tomcat8 locale 命令查看编码环境,可以看到已经改为 UTF-8,日志输出中文及返回数据中包含中文均正常显示,如下:
root@lc5i3z3wbje3:/var/data# docker exec -it tomcat8 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=
此时,查看日志,中文乱码问题解决了。