PHP date.timezone не найден с Docker и PHP-FPM

Я создаю среду Symfony (PHP-FPM, Nginx и другие) с помощью Docker и Docker-compose.

Но 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"

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

person Sylvain    schedule 14.03.2016    source источник


Ответы (3)


Официальный образ PHP Docker использует /usr/local/etc/php в качестве базовой папки: см.

person molivier    schedule 14.03.2016

Некоторое время я сталкивался с той же проблемой, у хост-машины была правильная дата / время, но каждый контейнер php был в GMT, а не в Европе / Париже или времени хоста.

Для тех из вас, кто будет искать верный ответ и нуждается в большей точности, чем ответ @moliver, использование sed в файле докеров, возможно, не лучший ответ. Более того, php.ini не может быть создан во время строительства. Вот ls of /usr/local/etc/php в одном из моих контейнеров 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: версия: '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"

Надеюсь это поможет

person Sylvain Martin Saint Léon    schedule 25.09.2017
comment
Похоже, это монтирует его как каталог. - person Simon; 15.04.2019

У меня была эта проблема в моем образе докера php: 5.6-apache.

Я просто добавил эти две строки в свой файл докеров:

# 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

Это сработало. :-)

person Stéphane Le Solliec    schedule 23.09.2020