跳转至

如何解决 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]



回到页面顶部