背景
公司线上部署采用 docker swarm 方式, 这几天线上项目时间突然出了问题 (ps: 第一反应, 我去, 这也能出问题, 代码里肯定藏毒了), 线上时间总跟实际时间差八个小时. 本着速战速决的原则, 把所有时间减了八个小时, 夜晚一上线, 卧槽, 没生效, 大佬给我 "指点" 一通后我幡然醒悟. 得, 总结一下问题
问题分析
宿主机采用的是 cst 时间
[root@test-env1 data]# date
2018 年 11 月 27 日 星期二 11:12:41 CST
docker 容器里采用的是 utc 时间
- root@40f3dddeaf46:/# date
- Tue Nov 27 03:13:21 UTC 2018
中间刚好相差八个小时
问题解决
两种方案:
改容器时间与宿主机保持一致
在代码中更改时间
改容器时间与宿主机保持一致
统一时区的几种方法
(1) 共享主机的 localtime
# docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash
(2) 复制主机的 localtime
docker cp /etc/localtime 87986863838b:/etc/
(3) 在 dockerfile 文件中加入如下内容
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai'>/etc/timezone
第二种就是继续沿用容器 utc 时间, 在原有的时间上加八个小时, 本着不麻烦其他大佬的原则还是接着用第二种
来源: https://www.cnblogs.com/qflyue/p/10025399.html