天天看點

docker 建構基礎鏡像 時區問題

修訂記錄:

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