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并且忽略了配置(在我的Symfony应用程序中找不到date.timezone参数)。

当然,当我使用我的容器时,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"

Dockerfile :

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。

一段时间以来,我一直面临同样的问题,主机有一个正确的日期/时间,但每个 php 容器都在 GMT 而不是欧洲/巴黎或主机日期时间。

对于那些将搜索有效答案并且需要比@moliver答案更精确的人,在 dockerfile 中使用 sed 可能不是最佳答案。此外,php.ini可能不会在构建时创建。这是我的一个 php 容器中的 ls /usr/local/etc/php

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 info:版本: '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 镜像中遇到了这个问题。

我只是在我的 dockerfile 中添加了这两行:

# 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

效果很好。 :-)