检测时间

1.首先看宿主机时间

[root@localhost ~]# date
Mon Apr 27 16:33:13 CST 2020

2.在看容器时间

root@a9444253b914:/usr/local/tomcat# date
Mon Apr 27 08:36:30 UTC 2020
这里我们可以看出容器的时间跟宿主机不在一个时间

解决方案

1.我们可以将宿主的localtime文件copy到container id中替换掉

docker cp /etc/localtime 容器ID:/etc/localtime
[root@localhost appdatas]# docker cp /etc/localtime cat:/etc/localtime

Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UCT" -> "../usr/share/zoneinfo/Asia/Shanghai"

ps:因为软连接的问题导致这里报错
我们可以将宿主机的配置文件到其他地方(不保存原有的连接属性)
如果没有则cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

cp /etc/localtime ./
2.我们这时候在看下容器时间

root@a9444253b914:/usr/local/tomcat# date
Mon Apr 27 16:48:23 CST 2020
容器时间的坑
1.有时候我们程序需要打印日志,会发现容器的时间跟宿主时间是一致但是输出的日志时间有问题
2.解决方法

echo Asia/Shanghai > /etc/timezone
3.这时候我们需要重启下容器,然后检查日志.这时候我们的日志时间就正常了

如果里面运行的是java程序,哪么程序时间还是会8个小时的差别:主要是Java或取时间是从/etc/timezone里获取时区

解决方法:挂载主机的/etc/timezone,如果没有则新建echo "Asia/shanghai" > /etc/timezone;

或者是通过jvm参数将时区信息传进jvm里:-Duser.timezone=GMT+08