tomcat日志文件在哪_tomcat容器时间同步

用docker部署容器服务时,很自然地涉及到容器内外时间同步问题,通常最简单的解决方式就是将宿主机的时间信息文件挂载到容器内相应位置。但是,当你部署tomcat容器时,用同样的操作不能彻底解决此类问题,这是为什么呢?让我们来一探究竟。

#开始之前我们先下载最新的tomcat镜像

docker pull tomcat:latest

#下载好镜像之后,用docker命令创建一个容器

docker run -p 8087:8080 -d tomcat:latest

-p参数将容器中tomcat的8080端口链接到外部的8087端口

#进入tomcat容器(其中e11a615959ef为对应的容器id)

docker exec -ti e11a615959ef /bin/bash

在容器中查看tomcat的时间信息如下:

未进行时间同步之前,容器内的时间默认为UTC标准时间,滞后我大中华时间8个小时。

#关闭刚刚创建的容器,将宿主机时间信息挂载到容器内

docker stop e11a615959ef

docker run -p 8087:8080 -v /etc/localtime:/etc/localtime:ro -d tomcat:latest

再次进入容器,查看时间信息如下:

2594a74e4cb876e3f0b52954b3e08568.png

这一次,时间信息完美与宿主机同步,打开浏览器也能正常出现如下tomcat页面,可正常提供服务。

1709f9851bae33bd49cb3e0a6929f5b0.png

但是当我们在容器中查看tomcat的日志信息时,发现时间信息还是有点问题。

5e107c73e9cbcf35336b0c5fd63ffc3a.png

时间信息依旧滞后8小时,这是为什么呢?

查阅资料后发现,tomcat和openjdk提供日志或web服务时用的不是/etc/localtime.ro中的时间信息,用的是/etc/timezone中的信息。查看容器中的/etc/timezone信息果然还是UTC。

2b3c880dbe73d918f0a38fd74bd0fa3a.png

找到了问题的症结,我们对症下药,在宿主机创建一个timezone文件来覆盖容器内的对应文件,宿主机创建timezone文件,内容为'Asia/Shanghai'。

方法一:

#挂载timezone文件,重新启动docker容器

docker run -p 8087:8080 -v /mnt/web/war/timezone:/etc/timezone -v /etc/localtime:/etc/localtime:ro -d tomcat:latest

#再次进入容器,查看log日志的时间信息,log日志的时间信息也与宿主机同

8cc182caf1073d058c2e18185af21999.png

当然日志时间不同步问题还有其他解决办法。

方法二:

在Dockfile构建tomcat容器时,在tomcat/bin/catalina.sh文件中修改tomcat JAVA_OPTS,添加如下内容

JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"

本篇内容在本人个人公众号上也已发布,欢迎关注本人微信公众号“勤菜鸟”。

Ref:

https://blog.lqdev.cn/2018/07/15/docker/docker-time-diff/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值