Ubuntu22 LTS 使用 Docker 28.0.1 运行 tomcat 8.5 出现中文乱码

本文将介绍如何解决在 Ubuntu 22 LTS 上的 Docker 2.8 中运行 Tomcat8 容器出现中文乱码问题。

环境说明

操作系统版本:Ubuntu 22.04.5 LTS

Docker版本:Docker Engine - Community 28.0.1

Tomcat 版本:apache-tomcat-8.5.93

错误信息

存在中乱码的日志信息如下图:

image.png

上图中,“???????????”中文显示成了乱码。

解决办法

(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=

此时,查看日志,中文乱码问题解决了。

成熟不是人的心变老,而是泪在眼眶里打转还能微笑。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号