一、前言
在把Java应用部署到docker容器时,发现应用获取到的时间和现实时间相差了8个小时,会导致一系列不必要的麻烦。
二、解决方案
1、首选需要确保宿主机的时区和时间的准确
现在宿主机上用 date -R 看一下时区是否为东八区(末尾有+0800)
2、若宿主机时区或者时间不准确,可以用date/ntpdate和tzdata同步一下时间以及更改时区
date命令:
date #查看当前时间,结果如下:2017年 01月 06日 星期五 13:02:55 CST
date -s 14:03:35 #设置当前时间,结果如下:2017年 01月 06日 星期五 14:03:35 CST
date -s 2017-01-08 #设置当前日期,结果如下:2017年 01月 08日 星期五 00:00:00 CST
ntpdate命令:
ntpdate -u 210.72.145.44 #网络时间同步命令
注意:若不加上-u参数, 会出现以下提示:no server suitable for synchronization found
-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;
210.72.145.44:中国国家授时中心的官方服务器。
ntp常用服务器:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
经测试中国国家授时中心与NTP上海服务器可以正常同步时间,注意需要加上-u参数!
时区修改:
使用tzselect, 选择到China/Shanghai即可
若显示未安装tzselect,可以安装一下tzdata
yum install tzdata #centos
apt-get install tzdata #ubuntu
3、复制宿主机上的zoneinfo文件夹到容器下的/usr/share/目录下。
docker cp /usr/share/zoneinfo 容器名称:/usr/share/
2、进入到容器中
docker exec -it 容器名称 /bin/bash
3、创建软连接,修改时区。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
4、查看时间,进行测试。
date -R
参考文章:
如何调整Linux系统为正确时区 | 《Linux就该这么学》 (linuxprobe.com)