修訂記錄:
2016.07.05 修正系統更新時區重置問題
前言
在使用tomcat官方docker 鏡像時,程式在與微信通信過程中傳回了時間差問題,檢視後發現是docker 容器的問題。
問題
docker 官方鏡像使用的都是UTC 标準時間,這就導緻了比beijing時間晚8小時。
解決這一問題并不難,隻要修正容器的時區就可以了。衆所周知,對容器的修改并不會影響到鏡像,是以又會出現這樣一個問題,再次從鏡像啟動容器時,時間就會又變成UTC 标準時間。對于此問題,自然是可以使用docker commit 來解決,但我并不想這樣做……
解決方案
基于centos 的鏡像,系統時區是由/etc/localtime 控制
基于debian 的鏡像,系統時區由/etc/timezone 控制
可将系統内的/usr/share/zoneinfo/Asia/Shanghai 檔案直接複制到以上位置修改時區
但在基于centos 鏡像内,隻修改/etc/localtime ,tomcat 取的仍然是UTC 時區,可配置catalina 啟動檔案的JAVA_OPTS參數,修正tomcat的時區
JAVA_OPTS="-Duser.timezone=GMT+08"
還有一種方式,就是同時設定/etc/timezone檔案
docker build -t morrowind/centos .
Dockerfile
#Version: Centos 7.2 CST
FROM centos:latest
MAINTAINER Morro Wind "[email protected]"
RUN yum -y -q upgrade
#update system timezone
#RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#update application timezone
RUN echo "Asia/Shanghai" >> /etc/timezone
通過Dockerfile 建構鏡像時需要注意,對時區的修改一定要放在yum upgrade後面,否則upgrade 後,會修改時區為UTC