1. 程式人生 > >docker內時間設定

docker內時間設定

在使用tomcat官方docker 映象時,程式在與微信通訊過程中返回了時間差問題,檢視後發現是docker 容器的問題。

 

問題

docker 官方映象使用的都是UTC 標準時間,這就導致了比beijing時間晚8小時。

 

解決這一問題並不難,只要修正容器的時區就可以了。眾所周知,對容器的修改並不會影響到映象,所以又會出現這樣一個問題,再次從映象啟動容器時,時間就會又變成UTC 標準時間。對於此問題,自然是可以使用docker commit 來解決,但我並不想這樣做……

 

解決方案

基於centos 的映象,系統時區是由/etc/localtime 控制

基於debian 的映象,系統時區由/etc/timezone 控制

可將系統內的/usr/share/zoneinfo/Asia/Shanghai 檔案直接複製到以上位置修改時區

mv /etc/localtime /etc/localtime_bak

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

但在基於centos 映象內,只修改/etc/localtime ,tomcat 或者Nginx取的仍可能是UTC 時區,tomcat可配置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
#update application timezone
RUN echo "Asia/Shanghai" >> /etc/timezone

通過Dockerfile 構建映象時需要注意,對時區的修改一定要放在yum upgrade後面,否則upgrade 後,會修改時區為UTC

 

後面就可以基於此基礎映象,構建應用映象了