docker 时区
docker 8 小时
建立docker 经常会出现 docker 日志的时间和正常时间相差 8小时 通过date -R 查看时区也没有问题
- 这是因为 date 指令对应的是 /etc/localtime
- 时区的修改要通过设置 /etc/timezone 否则调整了时间格式,本机所属的时区仍保持不变.
/etc/localtime和/etc/timezone 区别
- /etc/localtime是用来描述本机时间,
- /etc/timezone是用来描述本机所属的时区
- 调整了时间格式,本机所属的时区仍保持不变.
- 在linux中,有一些程序会自己计算时间,不会直接采用带有时区的本机时间格式,会根据UTC时间和本机所属的时区等计算出当前的时间。
比如jdk应用,时区为“Etc/UTC”,本机时间改为北京时间,通过java代码中new 出来的时间还是utc时间,所以必须得修正本机的时区。读取时区的步骤
参考
tz = getPlatformTimeZoneID(),这个函数内容,就不贴了,可以自己看下,总计起来,在Linux系统上,大概过程为以下几步:
1.先找“TZ”变量,没有,到2,
2.读/etc/timezone,没有到3,
3.比较/etc/localtime文件与”/usr/share/zoneinfo目录下所有时区文件,如果有一致的,就为该时区,如果没有,到4,
4.默认为标准GMT
时区修改
方法
- java -jar -Duser.timezone=GMT+08 xxx.jar
- System.setProperty(“user.timezone”,”GMT +08”);
结果
1
2
3
4// java.util.TimeZone#setDefaultZone
String zoneID = AccessController.doPrivileged(new GetPropertyAction("user.timezone"));
// 该地方可以获取到修改的时区修改docker 时区
- 方法一
终端执行 date命令,查看宿主服务器的时区是否正确
如果正确: 执行 docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime 将本地时间拷贝到docker内部 docker cp /usr/share/zoneinfo/Asia/Shanghai poetry:/etc/localtime - 方法二
如果宿主服务器时间本身有问题,可以直接修改宿主机时间,然后执行法一
也可以直接修改docker内部时区,执行命令:
CentOS
echo “Asia/shanghai” > /etc/timezone;
Ubuntu
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime - 方法三
创建时修改
增加映射使用主机时区 - v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- /etc/timeone和/etc/localtime区别