如何在我的 ddev 容器中设置时区?

How can I set the timezone in my ddev containers?

我经常使用 ddev ssh(对于 web/nginx 容器)或 ddev ssh -s db(对于 db/mariadb 容器),在查看日志等时我喜欢在我自己的时区查看 date/timestamps,这样我就不必费心考虑距格林威治标准时间多少小时了。我无法在容器中使用dpkg-reconfigure tzdata,因为容器用户没有root权限。

2019-06-24 更新:从 ddev v1.9.0+ 开始,您只需在 .ddev/config.yaml 中配置它:例如 timezone: Europe/London,或 ddev 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 为 [= 设置默认时区34=](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

从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