如何解决 Docker环境 Tomcat时区问题?
2017-08-17 by dongnan
错误描述
Docker
创建的 tomcat
容器,日志时区不正确,与其它容器不同的是,即使指定使用宿主机的 localtime
文件,虽然容器的系统时间正确,但是 tomcat
时区仍然是错误的,参考以下日志。
10-Aug-2017 06:43:48.228 INFO [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
# ...省略
10-Aug-2017 06:43:48.390 INFO [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
环境
Tomcat:9
Docker 1.13.1 On CentOS 7.4
宿主机时区
时区配置文件
tail -n1 /etc/localtime
CST-8
创建容器的时区
docker run -it --rm -p 10080:8080 \
-v /usr/local/tomcat/logs \
-v /etc/localtime:/etc/localtime \
--label aliyun.logs.catalina=stdout \
--label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
tomcat:9
tomcat
容器的系统时间正常,但是 tocmat catlina
日志时区仍然有误,这对容器日志收集程序带来问题。
解决方法
创建容器时,指定容器TZ
环境变量。如设置 TZ=Asia/Chongqing
命令如下:
docker run -it --rm -p 10080:8080 \
-v /usr/local/tomcat/logs \
-v /etc/localtime:/etc/localtime \
-e TZ=Asia/Chongqing \
--label aliyun.logs.catalina=stdout \
--label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
tomcat:9
验证
查看 tomcat
容器,日志的时区正常了。
10-Aug-2017 14:45:51.714 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 768 ms
10-Aug-2017 14:45:51.736 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]