PHP date.timezone 未找到 Docker & PHP-FPM
PHP date.timezone not found with Docker & PHP-FPM
我正在使用 Docker 和 Docker-compose 创建一个 Symfony 环境(PHP-FPM、Nginx 等)。
但是,PHP 不使用我的 php.ini 并忽略配置(date.timezone 参数在我的 Symfony 应用程序中找不到)。
当然,当我继续我的容器时,date.timezone 在 2 php.ini (cli & FPM) 中正确设置。
我不明白为什么,但是如果我把我的 php.ini 放在 /usr/local/etc/php/ 文件夹中就可以了 (wtf)
我错过了什么吗?
docker-compose.yml :
nginx:
image: nginx
volumes:
- "./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro"
links:
- "php:php"
ports:
- "80:80"
- "443:443"
working_dir: "/etc/nginx"
php:
build: docker/php
volumes:
- ".:/var/www:rw"
working_dir: "/var/www"
Docker文件:
FROM php:5-fpm
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y php5-common php5-fpm php5-cli php5-mysql php5-apcu php5-intl php5-imagick && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN sed -i 's/;date.timezone =/date.timezone = "Europe\/Paris"/g' /etc/php5/fpm/php.ini
RUN sed -i 's/;date.timezone =/date.timezone = "Europe\/Paris"/g' /etc/php5/cli/php.ini
RUN usermod -u 1000 www-data
官方 PHP Docker 图片使用 /usr/local/etc/php
作为基本文件夹:参见 Dockerfile。
我有一段时间一直面临同样的问题,主机有一个正确的 date/time 但每个 php 容器都是格林威治标准时间而不是 Europe/Paris 或主机日期时间.
对于那些将搜索有效答案并且需要比@moliver 答案更精确的人,在 docker 文件中使用 sed
可能不是最佳答案。此外,php.ini
可能不会在构建时创建。这是我的 php 容器之一中 /usr/local/etc/php
的 ls。
root@6fd7bc929a7e:/usr/local/etc/php/conf.d# ls
docker-php-ext-bcmath.ini docker-php-ext-exif.ini docker-php-ext-mysqli.ini docker-php-ext-soap.ini docker-php-ext-xsl.ini
docker-php-ext-bz2.ini docker-php-ext-gd.ini docker-php-ext-pcntl.ini docker-php-ext-tidy.ini docker-php-ext-zip.ini
docker-php-ext-calendar.ini docker-php-ext-mcrypt.ini docker-php-ext-pdo_mysql.ini docker-php-ext-xmlrpc.ini ext-imagick.ini
(是的,我添加了很多扩展,但默认情况下没有 php.ini)。
docker-compose 非常灵活,您可以添加包含 php.ini 信息的卷:
版本:'2'
services:
php:
build: ./DOCKERFILES/phpdemo
container_name: applicationDEMO
volumes:
- "./conf/whatever.ini:/usr/local/etc/php/conf.d/whatever.ini"
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
在你的 ./conf/whatever.ini
date.timezone = "Europe/Paris"
希望对您有所帮助
我的 php:5.6-apache docker 图像中有这个问题。
我只是在 docker 文件中添加了这两行:
# use development php ini
RUN mv /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini
# set default timezone
RUN sed -ri -e 's!;date.timezone =!date.timezone = "Europe/Paris"!g' /usr/local/etc/php/php.ini
效果很好。 :-)
我正在使用 Docker 和 Docker-compose 创建一个 Symfony 环境(PHP-FPM、Nginx 等)。
但是,PHP 不使用我的 php.ini 并忽略配置(date.timezone 参数在我的 Symfony 应用程序中找不到)。
当然,当我继续我的容器时,date.timezone 在 2 php.ini (cli & FPM) 中正确设置。
我不明白为什么,但是如果我把我的 php.ini 放在 /usr/local/etc/php/ 文件夹中就可以了 (wtf)
我错过了什么吗?
docker-compose.yml :
nginx:
image: nginx
volumes:
- "./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro"
links:
- "php:php"
ports:
- "80:80"
- "443:443"
working_dir: "/etc/nginx"
php:
build: docker/php
volumes:
- ".:/var/www:rw"
working_dir: "/var/www"
Docker文件:
FROM php:5-fpm
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y php5-common php5-fpm php5-cli php5-mysql php5-apcu php5-intl php5-imagick && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN sed -i 's/;date.timezone =/date.timezone = "Europe\/Paris"/g' /etc/php5/fpm/php.ini
RUN sed -i 's/;date.timezone =/date.timezone = "Europe\/Paris"/g' /etc/php5/cli/php.ini
RUN usermod -u 1000 www-data
官方 PHP Docker 图片使用 /usr/local/etc/php
作为基本文件夹:参见 Dockerfile。
我有一段时间一直面临同样的问题,主机有一个正确的 date/time 但每个 php 容器都是格林威治标准时间而不是 Europe/Paris 或主机日期时间.
对于那些将搜索有效答案并且需要比@moliver 答案更精确的人,在 docker 文件中使用 sed
可能不是最佳答案。此外,php.ini
可能不会在构建时创建。这是我的 php 容器之一中 /usr/local/etc/php
的 ls。
root@6fd7bc929a7e:/usr/local/etc/php/conf.d# ls
docker-php-ext-bcmath.ini docker-php-ext-exif.ini docker-php-ext-mysqli.ini docker-php-ext-soap.ini docker-php-ext-xsl.ini
docker-php-ext-bz2.ini docker-php-ext-gd.ini docker-php-ext-pcntl.ini docker-php-ext-tidy.ini docker-php-ext-zip.ini
docker-php-ext-calendar.ini docker-php-ext-mcrypt.ini docker-php-ext-pdo_mysql.ini docker-php-ext-xmlrpc.ini ext-imagick.ini
(是的,我添加了很多扩展,但默认情况下没有 php.ini)。
docker-compose 非常灵活,您可以添加包含 php.ini 信息的卷: 版本:'2'
services:
php:
build: ./DOCKERFILES/phpdemo
container_name: applicationDEMO
volumes:
- "./conf/whatever.ini:/usr/local/etc/php/conf.d/whatever.ini"
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
在你的 ./conf/whatever.ini
date.timezone = "Europe/Paris"
希望对您有所帮助
我的 php:5.6-apache docker 图像中有这个问题。
我只是在 docker 文件中添加了这两行:
# use development php ini
RUN mv /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini
# set default timezone
RUN sed -ri -e 's!;date.timezone =!date.timezone = "Europe/Paris"!g' /usr/local/etc/php/php.ini
效果很好。 :-)