docker 的时间要怎么和主机的同步

2018-04-28 23:38:27 +08:00
 helloworld12

网上找过资料了 下面这个设置无效

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

确切的说,docker exec -it xxx /bin/bash 然后 运行 date 看到的时间是有效的(没有 8 小时的时差)

但是我里面运行的 django 显示的时间,是差了 8 个小时的, docker 日志也是差了 8 小时的

2018-04-28T15:20:43.861694000Z Performing system checks...
2018-04-28T15:20:44.059789000Z System check identified no issues (0 silenced).
2018-04-28T15:20:44.099574000Z April 28, 2018 - 15:20:44
2018-04-28T15:20:44.099795000Z Django version 2.0.3, using settings 'xxx.settings'
2018-04-28T15:20:44.099940000Z Starting development server at http://0.0.0.0:8080/
2018-04-28T15:20:44.100072000Z Quit the server with CONTROL-C.

也试过在docker-compose 文件中挂在本地的localtime文件,依旧无效

volumes:
  - .:/code
  - /etc/localtime:/etc/localtime:ro

上面两种方式混合,也试过了,无效

4821 次点击
所在节点    问与答
13 条回复
helloworld12
2018-04-28 23:51:20 +08:00
在 docker 文件中加入 `RUN date` 显示的时间却是正常的,就是不知道,为什么`docker logs -t xxx` 显示的时间是差了 8 小时的, `CMD ["python", "./manage.py", "runserver", "0.0.0.0:8080"]` 显示的时间也是差了 8 小时的
helloworld12
2018-04-28 23:51:42 +08:00
评论不支持 markdown 啊...
helloworld12
2018-04-28 23:54:48 +08:00
[这个帖子的好像也是同样的问题]( https://segmentfault.com/q/1010000005776163)
smilekung
2018-04-28 23:56:21 +08:00
把本地 localtime 挂载进容器 只读模式即可
helloworld12
2018-04-28 23:59:18 +08:00
@smilekung - /etc/localtime:/etc/localtime:ro
是只读模式啊?
SbloodyS
2018-04-29 00:15:33 +08:00
Dockerfile 里 COPY /etc/localtime /etc/localtime 即可
blless
2018-04-29 00:41:23 +08:00
要安装 tzdata 包 然后设置 TZ 变量就好 tzdata 以前都有带的 后来不知道为啥现在基础镜像都没这个包了
znood
2018-04-29 09:12:05 +08:00
首先,这个是时区,不是时间问题,既然已经设置过了 date 也显示正常那是不是要考虑 django 的问题,比如为什么它没读取时区
julyclyde
2018-04-29 14:21:50 +08:00
@blless 正常情况下应用软件都应该在 UTC 时区正常工作,甚至应该在 UTC 时区工作
blless
2018-04-29 19:01:18 +08:00
@julyclyde ?没记错 UTC 就是特指 0 时区,我都没听过 utc 时区
helloworld12
2018-04-29 19:14:18 +08:00
@znood 不是 django 的问题
docker logs -t
的-t 选项, 和 django 没关系
julyclyde
2018-04-29 22:11:43 +08:00
@blless 0、GMT、UTC 只是数值相等而已,意义是不一样的
znood
2018-04-29 22:25:54 +08:00
@helloworld12 首先你问题就没说清楚,你说的时间不对其实是时区不对,而且是 docker logs -t 的时间,不是 django 自己打印的时间。

你明白 logs -t 参数的意义吗?你知道 docker 是怎么记录日志读取日志的吗?-t 参数是在原有日志基础上加了时间戳,而且这个时间戳显示的格式化格式是固定的。

也就是说你在拿一个不是问题,自己没有说明具体情况而又解决不了的问题问大家,浪费时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450807

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX