Docker宿主机时间与容器时间不一致问题
查看宿主机时区和时间:
[root@iZbp19plg6p1ajmesvagqvZ ~]# timedatectl
Local time: 五 2023-07-07 15:28:28 CST
Universal time: 五 2023-07-07 07:28:28 UTC
RTC time: 五 2023-07-07 07:28:27
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: n/a
RTC in local TZ: no
[root@iZbp19plg6p1ajmesvagqvZ ~]# date
2023年 07月 07日 星期五 15:30:10 CST
进入容器查看容器时间:
[root@iZbp19plg6p1ajmesvagqvZ ~]# docker exec -it hello-jenkins bash
root@5cb7e14e4f12:/# date
Fri Jul 7 07:32:47 UTC 2023
可以看到,默认容器的时间是UTC标准时间,而我们的宿主机使用的是东八区时间,此时可以在容器启动时挂载本机时间到容器中:
-v /etc/localtime:/etc/localtime
如果容器不方便重新创建,可以复制一份过去:
docker cp /etc/localtime {容器id或容器name}:/etc/localtime
再次查看容器时间:
[root@iZbp19plg6p1ajmesvagqvZ ~]# docker exec -it hello-jenkins bash
root@a6cbf1b8666c:/# date
Fri Jul 7 15:44:27 CST 2023
此时,容器时间和宿主机保持一致。
如果容器运行的是Java程序,比如在代码中输出指定格式时间,调用方法时依然返回标准时间:
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
// 2023-07-07 07:49:41
在启动容器加上指定时区:
-e TZ="Asia/Shanghai"
此时,输出时间变为:2023-07-07 15:53:49