在前幾天,在阿里雲的ECS上部署一個docker應用時,發現部署的應用在請求第三方應用時,一直出現超時的異常提示,剛開始以為是第三方應用系統的問題(此系統無賴躺槍,反正也不是一次兩次了,多躺幾次也就習慣了~),最后發現是容器的時間和數組的時間不一致,差了八小時。在上網查閱相關資料后,問題解決。這里就簡單做個記錄下。
Docker容器時間與主機時間不一致
通過date命令查看時間
查看主機時間
[root@izuf6gb2498ykvhcb4np5pz ~]# date
Sun Jul 15 15:30:41 CST 2018
查看容器時間
root@b43340ecf5ef:/#date
Sun Jul 15 15:31:10 UTC 2018
可以發現,他們相隔了8小時。
- CST應該是指(China Shanghai Time,東八區時間)
- UTC應該是指(Coordinated Universal Time,標准時間)
所以,只需要容器時區和宿主一致即可。
共享主機的localtime (方法一)
創建容器的時候指定啟動參數,掛載localtime文件到容器內 ,保證兩者所采用的時區是一致的。
docker run --name <name> -v /etc/localtime:/etc/localtime:ro
復制主機的localtime (方法二)
docker cp /etc/localtime:【容器ID或者NAME】/etc/localtime
在完成后,再通過date命令進行查看當前時間。
創建自定義的dockerfile (方法三)
創建dockerfile文件,其實沒有什么內容,就是自定義了該鏡像的時間格式及時區。
FROM redis
FROM tomcat
ENV CATALINA_HOME /usr/local/tomcat
#設置時區
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
保存后,利用docker build命令生成鏡像使用即可。
Docker容器時間與tomcat時間不一致
在容器和宿主一致后,在滿懷欣喜的重啟容器后,發現最后時間還是不對。。發現tomcat輸出的日志還是不一致的,這人生就很尷尬了。。
在tomcat/bin/catalina.sh文件中修改tomcat JAVA_OPTS,添加如下內容
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"
自此,問題解決。訪問第三方應用也一切正常了,它真的是莫名躺槍了。哈哈哈