在docker中启动Tomcat作为下载文件服务器,如果存在中文名的文件,则需要对docker的容器编码格式进行修改,使其能够支持中文,否则将无法在下载中文名文件。
1. 修改docker容器编码格式
直接启动docker容器,发现中文文件在里面显示为乱码

查看docker容器编码格式,可以看到当前编码格式为POSIX,这种编码格式不支持中文.

我们需要自己修改容器的编码格式。
1.1 安装中文语言包
查看容器所有的语言环境,如果没有中文语言包,则需要自己安装。

安装中文语言包:
1
| [root@e0f34910ee74 /]# yum install glibc-common
|
安装好后再次查看语言包信息,出现中文语言包。

1.2 docker build生成新的镜像
将下好语言包的容器commit成一个新的镜像
1
| [root@host-10-0-251-159 dockerbuild]# docker commit c2eb75865693 webcrawler-service:test
|
基于这个新镜像写一个Dockerfile,然后基于Dockerfile生成我们需要的镜像。
Dockerfile为
1 2 3
| [root@host-10-0-251-159 dockerbuild]# cat Dockerfile FROM webcrawler-service:test ENV LANG zh_CN.UTF-8
|
docker build成新的镜像
1
| [root@host-10-0-251-159 dockerbuild]# docker build -t webcrawler-service-new .
|
基于这个新镜像webcrawler-service-new启动一个容器,进入这个容器,我们可以看到容器编码为我们设置的zh_CN.UTF-8,生成一个新的中文名文件,不再出现乱码。
1 2
| [root@host-10-0-251-159 /]# docker run -tid eec4bea /run.sh [root@host-10-0-251-159 /]# docker exec -ti eec4bea /bin/bash
|


2. Tomcat8 HTTP文件下载文件
2.1 修改Tomcat配置文件
在Tomcat安装目录下,修改web.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [root@eec4bea40bab conf]# vi /usr/local/tomcat/conf/web.xml …… <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value> (把原来的false改为true) </init-param> <load-on-startup>1</load-on-startup> </servlet> ……
|
2.2 创建用于下载的xml文件
在安装目录下的conf/Catalina/localhost/下新建一个xml文件,用于访问下载列表。
1 2 3 4 5
| [root@eec4bea40bab conf]# vi /usr/local/tomcat/conf/web.xml [root@eec4bea40bab conf]# cat /usr/local/tomcat/conf/Catalina/localhost/download.xml <?xml version="1.0" encoding="utf-8"?> <Context reloadable="true" docBase="/usr/download" crossContext="true"> </Context>
|
其中docBase的路径为对外暴露的下载路径,需要存在该路径。
docker容器,对外暴露需要访问的端口,浏览器访问,出现下载列表:

因为有需求是文件名需要有中文。一开始中文出现乱码,导致无法下载文件。查阅了网上很多资料,都说是因为Tomcat默认的编码方式是iso8859-1,而iso8859-1不属于中文码表,故而出现乱码。建议修改server.xml文件,将编码方式修改为utf-8: URIEncoding=”utf-8”。我进行尝试后发现依然中文乱码。后来发现Tomcat8默认的编码已经是utf-8了,所以不需要修改server.xml文件 (如果从Tomcat早期版本迁移到Tomcat8需要注意这个问题)。后来多次测试,发现是系统环境的问题,如果系统本身不支持中文,则修改Tomcat后也不支持中文文件的下载,需要先修改系统环境语言。