docker tomcat 中文乱码问题解决方案


前言:通过 docker 部署了Tomcat,然后 GeoServer 放在 Tomcat。发布带 label 的图层时,中文显示不出来,无论各种设置,都是乱码(如图所示)。而在 Ubuntu(已装中文字体)里面直接安装 Tomcat,这时该 Tomcat 下的 geoserver 能正常显示 label 的中文字体(直接安装,Tomcat 会时不时挂掉,加守护进程很麻烦)。一番搜索之后,才发现 docker 容器本来就没有中文字体,而 GeoServer 的 label 字体是依赖其所在系统(这里则是 docker 容器虚拟机)。于是尝试把本地字体库映射进去,还是不行,初步决定把当前 Tomcat 镜像换掉试试看。

原来用的镜像是 davidcaste/alpine-tomcat,docker 版本是 17.03.2-ce
根据网上教程,进入容器(docker exec -it tomcat /bin/bash),然后通过命令 localelocale -a 查看中文字体情况,并使用 LANG=C.UTF-8 来设置中文语言环境。然而可能是镜像原因,无法使用这些命令。

$ docker exec -i -t tomcat /bin/bash
bash-4.3# locale
bash: locale: command not found

那么,先尝试一条出路,抛弃该镜像,重新弄个镜像。
注:如果从未安装过 Tomcat 及 java ,则先安装 java 环境(oracle 或 openjdk)

$ sudo apt-get install openjdk-8-jdk

安装镜像

下面使用 dockerfile 来安装。

官网上列出了所有支持的标签。

我这里选择了 tomcat:8-jre8,没有为什么!

$ mkdir tomcat-docker
$ cd tomcat-docker
$ touch Dockerfile
$ vi Dockerfile

上面的命令是创建了 Dockerfile 文件并打开,这时往 Dockerfile 文件填入:

FROM tomcat:8-jre8
MAINTAINER "lychee lin <gishohoho@gmail.com>"

然后保存退出(:wq)
开始构建:

$ docker build -t gis/tomcat .
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM tomcat:8-jre8
8-jre8: Pulling from library/tomcat
54f7e8ac135a: Pull complete
d6341e30912f: Pull complete
087a57faf949: Pull complete
95065f220961: Pull complete
0887630ce576: Pull complete
c375d1959fab: Pull complete
e00a5e6055cc: Pull complete
8319f5fb56cf: Pull complete
258c74eb25ab: Pull complete
5c135322994c: Pull complete
b2cc25ec4861: Pull complete
40140bebba00: Pull complete
d1786b40ed4f: Pull complete
Digest: sha256:d6f67aacce64010880a1e9ea6f0ace9fe9e20d39aae0489c8e88b4c14effe3a0
Status: Downloaded newer image for tomcat:8-jre8
 ---> 48dd385504b1
Step 2/2 : MAINTAINER "lychee lin <gishohoho@gmail.com>"
 ---> Running in 70e26c05b946
Removing intermediate container 70e26c05b946
 ---> 1a5cdbcf31a0
Successfully built 1a5cdbcf31a0
Successfully tagged gis/tomcat:latest

docker build -t gis/tomcat . 注意最后有个点

启动Tomcat

$ docker run -d --name tomcat-gis --restart always -v ~/tomcat/webapps:/usr/local/tomcat/webapps -v ~/tomcat/temp:/usr/local/tomcat/temp -v /usr/share/fonts:/usr/share/fonts -p 58888:8080 gis/tomcat

将原来Tomcat下的 webapps 目录映射过去。
其中,-v /usr/share/fonts:/usr/share/fonts,把字体库也映射了过去,这一句很关键

$ ls /usr/share/fonts/
X11/  simsun.ttc  truetype/

simsun.ttc 这个是宋体,是从 win7 拷过去的。

重新打开图层预览,中文终于正常显示。

转载自:https://blog.csdn.net/geol200709/article/details/84955746

You may also like...

退出移动版