代码之家  ›  专栏  ›  技术社区  ›  Helge Talvik Söderström

docker compose:容器时区

  •  2
  • Helge Talvik Söderström  · 技术社区  · 7 年前

    我正在使用Docker Compose在我的开发环境中运行我的堆栈,但我遇到了容器中的时区比我自己的时区晚一个小时的问题,这打破了关键任务,使开发变得非常困难。

    我认为这是一个常见的问题,所以我搜索了很多地方,但我发现只有两个解决方案不起作用(不起作用:没有效果)。

    我试过两件事:

    尝试1-从主机对卷进行符号链接
    通过尝试安装 /etc/timezone /etc/localtime ro -体积,我希望容器将具有与主机相同的时区。没有影响。

    尝试2-设置 command
    使用 ENTRYPOINT 在我的 Dockerfile ,我设置了 命令 docker-compose.yml -因此归档:

    environment:
        - APPLICATION_ENV=dev-docker
        - TZ=Europe/Stockholm
    build: ../../core/document
    command: >
      sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
      echo $TZ > /etc/timezone &&
      exec /go/bin/documents"
    

    同样,没有任何影响。

    没有官方方法在Docker容器中设置时区吗?我觉得这对比我更多的用户来说应该是一个关键问题。

    谢谢

    编辑 :the dockerfile core/documents -项目,按要求。

    # This file is intended for use with the GitLab CI tool where the binary has already been built.
    FROM golang:1.9.2
    
    # The binary is built and downloaded to the current directory by GitLab CI.
    COPY ./documents /go/bin
    
    # Run the program.
    ENTRYPOINT /go/bin/documents
    
    2 回复  |  直到 7 年前
        1
  •  7
  •   Robin    7 年前

    我也遇到了时区问题,对我来说,这就是关键:

    environment:
      - TZ=Europe/Stockholm
    
        2
  •  1
  •   Helge Talvik Söderström    6 年前

    我知道我从来没有正确回答过这个问题。我确实找到了解决办法。

    TL;博士:
    Alpine仅检查 /usr/share/zoneinfo/Europe/Stockholm -文件,而不是 /etc/localtime -文件。


    基本上,缺少的一步是Alpine没有检查 /etc/本地时间 -路径-它仅检查 /usr/share/zoneinfo/Europe/Stockholm -路径(更改为您的时区)。

    就我而言,我决定采用一种可以说是非正统的解决方案。我想:

    • 只复制我真正想要的时区,作为 tzdata 包裹的大小是整个容器的两倍;基本图像和二进制图像
    • 运行适当的 apk tel tzdata -命令,而不是清理自己在一些奇怪的 rm -路。
    • 不要弄乱 TZ数据 -使用其他文件打包,或手动向其中写入内容(除了符号链接)

    因此,我决定安装 TZ数据 ,复制我想要的时区 /etc/本地时间 然后创建一个符号链接,使Alpine仍能读取该文件。

    我有以下几点 Dockerfile :

    RUN \
        apk --update add curl bash nano tzdata && \
        cp /usr/share/zoneinfo/Europe/Stockholm /etc/localtime && \
        echo "Europe/Stockholm" > /etc/timezone && \
        apk del tzdata && \
        rm -r /var/cache/apk/* && \
        mkdir -p /usr/share/zoneinfo/Europe && \
        ln -s /etc/localtime /usr/share/zoneinfo/Europe/Stockholm