问题分析
在docker容器和系统时间不一致是因为docker容器的原生时区为0时区,而宿主机时间是+8个时区
前提条件
先要确认宿主机时间是否正确
可以使用date命令
root@sony-HP-Notebook:/# date
2022年 06月 10日 星期五 16:14:28 CST
如果时间错误,则先进行对时
date -s $year.$month.$day-$hour:$minute:$second
date -s 2022.06.10-16:14:28
方法一:启动时进行映射
运行 docker run 添加 -v /etc/localtime:/etc/localtime 选项,如下:
如果统一时区还需要添加-v /etc/timezone:/etc/timezone
docker run -d -p 8080:80 -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone nginx
方法二:复制时区信息到容器
该场景适用于已经创建的容器:
如果本机时区正确直接:
docker cp /etc/localtime nginx:/etc/localtime
如果本机时区不正确:
docker cp /usr/share/zoneinfo/Asia/Shanghai nginx:/etc/localtime
SpringBoot项目通过docker run映射时区无效,需要通过如下代码设定
public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
SpringApplication.run(InspectionApplication.class, args);
}