V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moxuanyuan
V2EX  ›  Docker

如何设置 docker 时区?

  •  
  •   moxuanyuan · 2022-03-20 14:49:06 +08:00 · 2348 次点击
    这是一个创建于 986 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker-compose.yml

    能设置的我都设置,时区还时为零时区,跟我们相差 8 小时。。

    虽然不影响使用。。但看 log 时 ,强迫症很难受

    13 条回复    2022-03-20 16:03:41 +08:00
    AllenHua
        1
    AllenHua  
       2022-03-20 15:14:04 +08:00
    镜像不支持 TZ 变量?可以自己 build 一个镜像出来自己加上时区配置,Dockerfile 增加
    ```
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    ```

    另外如果容器不常更新,也可以直接进入容器改 Linux 时区配置(基础镜像使用的 alpine 或者 debian 等会导致命令可能有所不同)

    ```
    export TZ="Asia/Shanghai"
    # echo $TZ
    Asia/Shanghai
    # date
    Sun Mar 20 15:11:18 CST 2022

    或者

    # date
    Sun Mar 20 07:11:18 UTC 2022
    # ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    # date
    Sun Mar 20 15:11:18 CST 2022
    ```
    hingle
        2
    hingle  
       2022-03-20 15:16:10 +08:00
    看了下用的是 alpine 镜像,只要设置 /etc/localtime 和 /etc/timezone 即可。
    https://wiki.alpinelinux.org/wiki/Setting_the_timezone

    可能你那本机就是 UTC ,或者你只是改了配置没重新 up 。
    moxuanyuan
        3
    moxuanyuan  
    OP
       2022-03-20 15:22:00 +08:00
    @hingle #2
    我看 vps ,时区已经设置为 Asia/Shanghai ,显示的时间也是对的,就是 docker 容器里不对。。
    moxuanyuan
        4
    moxuanyuan  
    OP
       2022-03-20 15:25:55 +08:00
    @hingle #2 https://hub.docker.com/r/rapiz1/rathole 还有这个镜像都一样,不能设置时区。。
    moxuanyuan
        5
    moxuanyuan  
    OP
       2022-03-20 15:26:56 +08:00
    @AllenHua #1 我只是初学都,还没有学习怎样 build 镜像,现在只是使用 docker hub 上的镜像。。
    AllenHua
        6
    AllenHua  
       2022-03-20 15:29:40 +08:00
    @moxuanyuan #5 vps 时间是对的,那就把 vps 时间同步到容器中 docker cp 进去
    hingle
        7
    hingle  
       2022-03-20 15:30:42 +08:00
    @moxuanyuan 你把 environment 那两行删掉就行了。
    moxuanyuan
        8
    moxuanyuan  
    OP
       2022-03-20 15:32:57 +08:00
    @hingle #7 原来如此。。太感谢了。。
    moxuanyuan
        9
    moxuanyuan  
    OP
       2022-03-20 15:34:45 +08:00
    @hingle #7 意思,就是说 基于 alpine 的镜像,不能设置 environment TZ 。。
    hingle
        10
    hingle  
       2022-03-20 15:39:26 +08:00
    @moxuanyuan alpine 镜像里装一个 tzdata 包就能用了
    moxuanyuan
        11
    moxuanyuan  
    OP
       2022-03-20 15:52:07 +08:00
    @hingle #10 那就怪了,https://github.com/containrrr/watchtower 这个镜像也是基于 alpine ,我也是通过设置 TZ 变量来设置时区,我看 log 是可以正确设置的。。
    hingle
        12
    hingle  
       2022-03-20 16:00:03 +08:00
    @moxuanyuan 因为构建镜像的时候装了 tzdata , 可以看一下这个 Dockerfile
    https://github.com/containrrr/watchtower/blob/main/dockerfiles/Dockerfile
    moxuanyuan
        13
    moxuanyuan  
    OP
       2022-03-20 16:03:41 +08:00
    @hingle #10 明白了,是不是最可靠设置时区的方法是 `` -v /etc/localtime:/etc/localtime:ro ``
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1660 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:47 · PVG 00:47 · LAX 08:47 · JFK 11:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.