原文: https://blog.csdn.net/luckystar689/article/details/76572046
https://stackoverflow.com/questions/35994349/php-date-timezone-not-found-with-docker-php-fpm
Official PHP Docker Image use /usr/local/etc/php
as base folder: see Dockerfile.
'm creating a Symfony environment (PHP-FPM, Nginx, & more) with Docker & Docker-compose.
But, PHP does not use my php.ini and ignores the config (date.timezone parameter is not found in my Symfony application).
Of course, when I go on my container, the date.timezone is correctly set in the 2 php.ini (cli & FPM).
I don't understand why, but it works if I put my php.ini in /usr/local/etc/php/ folder (wtf)
Did I miss something?
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
---------------------------------------------------------------------------------
目錄
背景
公司做的項目是部署到dockerize的tomcat容器上的,將日志映射到了宿主機器的某個目錄下,但是出現了一個問題,那就是日志打印的時間有問題,會比宿主機的時間晚8個小時。
解決方法
一、先查看服務器和容器時區設置是否一致:
1、docker容器內的時區是UTC
2、主機的時區是CTS
二、這兩個時區有什么不同呢?
GPS 系統中有兩種時間區分,一為UTC,另一為LT(地方時)兩者的區別為時區不同,UTC就是0時區的時間,地方時為本地時間,如北京為早上八點(東八區),UTC時間就為零點,時間比北京時晚八小時
CTS:
China Standard Time,UTC+8:00 中國沿海時間(北京時間)
UTC:
Universal Time Coordinated 世界協調時間
三、如何解決?(設置時區一致)
解決的時候做了三種嘗試:
第一次在服務鏡像所依賴的鏡像tomcat的Dockerfile中加入如下設置:
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
- 1
- 2
重新構建鏡像,啟動容器,發現和此tomcat鏡像在同一台服務器上的服務時區和時間均修改成功,但是不在同一台服務器上的docker容器還是UTC時區,時間不一致。
第二次,容器啟動的時候掛個參數,讓其使用主機服務器上的時間:
docker run -d --name demo-service --rm -p 8084:8080 -v /usr/local/tomcat/logs/tomcat8080:/usr/local/tomcat/logs -v /etc/localtime:/etc/localtime demo-service:1.0.0
- 1
其中加入的 -v /etc/localtime:/etc/localtime就是時間的設置,設置好后,啟動容器,進入容器內部,打date命令,輸出的時間和主機時間一樣,然后查看tomcat日志,發現日志的時間沒有變還是比主機晚8個小時。
於是,尋求另一種解決辦法。
第三次,在各個服務的Dockerfile中加入對時區和時間的設置,如第一次嘗試的Dockerfile中加入的內容。
重新使用Jenkins構建服務,實驗成功!