因为项目中有个业务,需要取得当前时间,商品参加活动的情况。但是总查询不出结果,后来发现是mysql的时间查询不正确,原因是mysql的时间晚了8小时。因为mysql安装在docker中,所有最终的原因是docker的时区与当前时间不一致。以下是转载修改docker时区的方法
最近玩 Docker 玩儿的非常的嗨皮,并且把公司的生产环境全部变成 Docker 部署的啦。因为 Base Image 使用的基本上都是 Docker 官方的,所以里面的时间设置大多是 Etc/UTC
,也就是标准的 UTC 时间,所以要简单的调整一下,变成中国标准时间。
如果已经创建了 container 的话,可以直接接入到 container 里面,用命令行实现时区的更改:
首先通过下面的命令进入对应的 containerid:(docker ps 可以获得CONTAINER ID)
1 |
# docker exec -ti containerid bash |
然后在 container 里面执行如下的命令:
1 2 |
# echo "Asia/Shanghai" > /etc/timezone # dpkg-reconfigure -f noninteractive tzdata |
可以看到屏幕上有类似的输出:
1 2 3 |
Current default time zone: 'Asia/Shanghai' Local time is now: Thu Feb 5 10:55:04 CST 2015. Universal Time is now: Thu Feb 5 02:55:04 UTC 2015. |
我们可以看到,local time 已经变成了 CST
,也就是 CST – China Standard Time
,这样我们的时区修改就已经完成了,之所以要用 noninteractive
的方式,是为了方便我们整合到 Dockerfile
中使用,比如:
1 2 |
RUN echo "Asia/Shanghai" > /etc/timezone RUN dpkg-reconfigure -f noninteractive tzdata |
这样的话,我们可以把时区设置做到自己的 Image 中,就不需要每个 container 运行一次时区设置了。