V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
helloworld12
V2EX  ›  问与答

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

  •  
  •   helloworld12 · 2018-04-28 23:38:27 +08:00 · 4724 次点击
    这是一个创建于 2196 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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
    

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

    第 1 条附言  ·  2018-04-29 01:39:15 +08:00
    @all

    谢谢各位

    我用的是 django, 然后 django 里面也可以设置时区,暂时算是绕过这个问题吧, 不过系统日志还是 UTC 的时间截(很是不解)
    13 条回复    2018-04-29 22:25:54 +08:00
    helloworld12
        1
    helloworld12  
    OP
       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
        2
    helloworld12  
    OP
       2018-04-28 23:51:42 +08:00
    评论不支持 markdown 啊...
    helloworld12
        3
    helloworld12  
    OP
       2018-04-28 23:54:48 +08:00
    [这个帖子的好像也是同样的问题]( https://segmentfault.com/q/1010000005776163)
    smilekung
        4
    smilekung  
       2018-04-28 23:56:21 +08:00 via Android
    把本地 localtime 挂载进容器 只读模式即可
    helloworld12
        5
    helloworld12  
    OP
       2018-04-28 23:59:18 +08:00
    @smilekung - /etc/localtime:/etc/localtime:ro
    是只读模式啊?
    SbloodyS
        6
    SbloodyS  
       2018-04-29 00:15:33 +08:00
    Dockerfile 里 COPY /etc/localtime /etc/localtime 即可
    blless
        7
    blless  
       2018-04-29 00:41:23 +08:00 via Android
    要安装 tzdata 包 然后设置 TZ 变量就好 tzdata 以前都有带的 后来不知道为啥现在基础镜像都没这个包了
    znood
        8
    znood  
       2018-04-29 09:12:05 +08:00 via iPhone
    首先,这个是时区,不是时间问题,既然已经设置过了 date 也显示正常那是不是要考虑 django 的问题,比如为什么它没读取时区
    julyclyde
        9
    julyclyde  
       2018-04-29 14:21:50 +08:00
    @blless 正常情况下应用软件都应该在 UTC 时区正常工作,甚至应该在 UTC 时区工作
    blless
        10
    blless  
       2018-04-29 19:01:18 +08:00 via Android
    @julyclyde ?没记错 UTC 就是特指 0 时区,我都没听过 utc 时区
    helloworld12
        11
    helloworld12  
    OP
       2018-04-29 19:14:18 +08:00
    @znood 不是 django 的问题
    docker logs -t
    的-t 选项, 和 django 没关系
    julyclyde
        12
    julyclyde  
       2018-04-29 22:11:43 +08:00
    @blless 0、GMT、UTC 只是数值相等而已,意义是不一样的
    znood
        13
    znood  
       2018-04-29 22:25:54 +08:00 via iPhone   ❤️ 1
    @helloworld12 首先你问题就没说清楚,你说的时间不对其实是时区不对,而且是 docker logs -t 的时间,不是 django 自己打印的时间。

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

    也就是说你在拿一个不是问题,自己没有说明具体情况而又解决不了的问题问大家,浪费时间。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2136 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:29 · PVG 19:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.