Docker 有个很不友好的设定,就是没有默认将容器和宿主机进行时间同步。
分别来查看一下宿主机和容器的时间,通常容器的时间比宿主机要慢 8 小时:
[root@k8s-master conf]# date
2022年 03月 31日 星期四 17:08:00 CST
[root@k8s-master conf]# docker exec -it 06dd47f16a43 bash -c "date"
Thu Mar 31 08:58:58 UTC 2022
所以需要手动设置二者的时间同步。
总共有三种情况需要设置时间同步,分别是:
正在运行的容器
自定义容器镜像
使用第三方镜像
接下来看看这三种情况的处理方式。
1、对于已经运行中的容器的处理方式:将宿主机的 /etc/localtime 文件复制给容器。
[root@k8s-master conf]# docker exec -it 06dd47f16a43 bash -c "ls -l /usr/share/zoneinfo/Asia/Shanghai"
-rw-r--r--. 1 root root 582 Jan 26 2021 /usr/share/zoneinfo/Asia/Shanghai
再来查看二者的时间,已经同步了:
[root@k8s-master conf]# docker exec -it 06dd47f16a43 bash -c "date"
Thu Mar 31 17:11:17 CST 2022
[root@k8s-master conf]#
[root@k8s-master conf]# date
2022年 03月 31日 星期四 17:11:18 CST
2、如果是自定义的镜像,建议在 dockerfile 中就提前处理好。以 CentOS 为例,添加如下配置:
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、如果是使用第三方的镜像创建容器,建议创建容器时使用 -v 参数让容器使用宿主机的 /etc/localtime 文件。如下所示:
docker run --name <容器名称> -v /etc/localtime:/etc/localtime
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。