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
),然后通过命令 locale
及 locale -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