在 dockerized Nginx + PHP-FPM 中配置时区
我需要在 Dockerfile 中设置默认时区.我有两个容器(nginx 和 php7-fpm).
I need to set the default timezone in a Dockerfile. I have two containers (nginx and php7-fpm).
当我进入 PHP 容器的 bash 并运行 php --info |grep 时区
我得到:
When I enter the PHP container's bash and run php --info | grep timezone
I get:
默认时区 =>世界标准时间
Default timezone => UTC
日期.时区=>没有价值=>没有价值
date.timezone => no value => no value
我的 dockerfile 如下:
My dockerfiles are the following:
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
我尝试使用类似问题的答案,但没有结果.
I've tried to use the answers of similar questions with no results.
注意:我使用 docker-compose build
和 docker-compose up -d
来运行完整的堆栈,这正是 这个.
Note: I'm using docker-compose build
and docker-compose up -d
to run the complete stack, which is exactly this one.
推荐答案
时区设置有两种类型.一是系统级.您可以使用 /etc/localtime
There are two type of Time zone settings. One is a system level. That you can set using /etc/localtime
请参阅下面的 Dockerfile 步骤
See the Dockerfile steps below
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
PS:取自 https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes
也可以参考另一篇文章使用docker-compose设置容器时区
接下来是 PHP/APP 级别的设置.为此,您可以创建一个 ini 文件.这可以通过在 Dockerfile 中添加以下行来完成
Next is the PHP/APP level setting. For that you can create a ini file. Which can be done by adding below line to Dockerfile
RUN printf '[PHP]
date.timezone = "US/Central"
' > /usr/local/etc/php/conf.d/tzone.ini
相关文章