[轉]解決Docker容器時間與主機不一致問題


原文: https://blog.csdn.net/luckystar689/article/details/76572046

https://stackoverflow.com/questions/35994349/php-date-timezone-not-found-with-docker-php-fpm

2down voteaccepted

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構建服務,實驗成功!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM