docker內時間設定
阿新 • • 發佈:2018-11-09
在使用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
後面就可以基於此基礎映象,構建應用映象了