【问题标题】:How can I set the timezone in my ddev containers?如何在我的 ddev 容器中设置时区?
【发布时间】:2023-04-07 09:32:01
【问题描述】:

我经常使用ddev ssh(用于 web/nginx 容器)或ddev ssh -s db(用于 db/mariadb 容器),在查看日志等时,我希望在我自己的时区中查看日期/时间戳,所以我不必考虑从格林威治标准时间到多少小时。我不能在容器中使用dpkg-reconfigure tzdata,因为容器用户没有root权限。

【问题讨论】:

    标签: ddev


    【解决方案1】:

    2019 年 6 月 24 日更新:从 ddev v1.9.0+ 开始,您可以在 .ddev/config.yaml 中进行配置:例如,timezone: Europe/Londonddev config --timezone=Europe/London 这会同时配置容器的时区和 php 的时区默认时区。

    同样在 v1.9.0 中,容器中的时区默认为 UTC。

    旧 docker-compose.*.yaml 答案:

    这很容易通过一个额外的 docker-compose 文件(对于 TZ)和一个 php 覆盖(对于 PHP)来实现。例如,在我的项目中,我有一个 .ddev/docker-compose.timezone.yaml 将这些容器中的 TZ 变量设置为我的时区和一个 .ddev/php/tz.ini 设置 php 的默认时区(php 不'不再尊重 TZ 环境变量,请参阅php doc

    .ddev/docker-compose.timezone.yaml:

    version: '3.6'
    
    services:
      web:
        environment:
          - TZ=Europe/Berlin
     db:
        environment:
          - TZ=Europe/Berlin
    

    和.ddev/php/tz.ini:

    date.timezone = Europe/Berlin
    

    【讨论】:

    • TZ 环境变量似乎只适用于 PHP
    • 这实际上是关于 容器 而不是 PHP。您可能需要针对这种情况添加 php 配置覆盖。
    • 我更新以展示如何使用 php 覆盖设置 PHP 默认值。
    【解决方案2】:

    从 ddev v1.8.0 开始,您还可以通过配置 .ddev/webimage-build/Dockerfile 在 Web 容器中设置时区。事实上,.ddev/webimage-build/Dockerfile.example 正是这样做的:

    ARG BASE_IMAGE=drud/ddev-webserver:v1.8.0
    FROM $BASE_IMAGE
    RUN ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime && dpkg-reconfigure --frontend noninteractive tzdata
    

    如上所述,您还需要在 .ddev/php/tz.ini 中覆盖 PHP,

    date.timezone = Europe/Berlin
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2019-10-09
      • 2018-12-06
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多