在Docker化的Nginx + PHP-FPM中配置时区

9

我需要在Dockerfile中设置默认时区。我有两个容器(nginx和php7-fpm)。

当我进入PHP容器的bash并运行php --info | grep timezone时,我得到以下结果:

Default timezone => UTC

date.timezone => no value => no value

我的dockerfiles如下:

nginx/Dockerfile:

FROM debian:jessie

RUN apt-get update && apt-get install -y nginx

ADD nginx.conf /etc/nginx/
ADD site.conf /etc/nginx/sites-available/

RUN ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site
RUN rm /etc/nginx/sites-enabled/default

RUN echo "upstream php-upstream { server php:9000; }" > /etc/nginx/conf.d/upstream.conf

RUN usermod -u 1000 www-data

CMD ["nginx"]

EXPOSE 80
EXPOSE 443

php-fpm/Dockerfile:

FROM php:7.0-fpm

RUN apt-get update && apt-get install -y git unzip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer --version

RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Europe/Madrid /etc/localtime
RUN "date"

RUN docker-php-ext-install pdo pdo_mysql

RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

WORKDIR /var/www/site

我尝试使用类似问题的答案,但没有结果。

注意:我正在使用docker-compose builddocker-compose up -d来运行完整的堆栈,这正是这个

1个回答

33

有两种类型的时区设置。其中一种是系统级别的,你可以使用/etc/localtime来进行设置。

请参见下面的Dockerfile步骤。

ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

注:本文摘自https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes

如果需要,您还可以参考另一篇文章《使用docker-compose设置容器时区》

接下来是PHP/APP级别的设置。您可以创建一个ini文件,通过在Dockerfile中添加以下行来实现:

RUN printf '[PHP]\ndate.timezone = "US/Central"\n' > /usr/local/etc/php/conf.d/tzone.ini

你的第二个代码块有一个打字错误。但是无论如何,我已经尝试了第一个,它不是我需要的,第二个似乎也不起作用 :( - CarlosAS
问题是什么?对我而言,它可以工作root@e3d4bc020357:/var/www/html# php -i | grep zone 已解析附加的.ini文件 =>/usr/local/etc/php/conf.d/tzone.ini "Olson"时区数据库版本=>2017.2 时区数据库=>内部 默认时区=>US/Central date.timezone =>US/Central => US/Central - Tarun Lalwani
不是我的问题...我也已经注释掉了之前的时区代码,但还有其他东西搞砸了它。 - CarlosAS
请发布您更新后的Dockerfile。让我使用您的确切文件。 - Tarun Lalwani
1
不好意思,扩展名应该是.ini而不是.conf。我先尝试使用了conf,然后是ini,然后不小心错误地发布了带有conf的解决方案。 - Tarun Lalwani
明白了,在安装nginx之前,您需要先设置时区。非常感谢。 - Emdadul Sawon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接