在前幾天,在阿里雲的ECS上部署一個docker應用時,發現部署的應用在請求第三方應用時,一直出現超時的異常提示,剛開始覺得是第三方應用系統的問題(此係統無賴躺槍,反正也不是一次兩次了,多躺幾回也就習慣了~),最後發現是容器的時間和數組的時間不一致,差了八小時。在上網查閱相關資料後,問題解決。這裏就簡單作個記錄下。redis
經過date命令查看時間docker
查看主機時間數組
[root@izuf6gb2498ykvhcb4np5pz ~]# date Sun Jul 15 15:30:41 CST 2018
查看容器時間tomcat
root@b43340ecf5ef:/#date Sun Jul 15 15:31:10 UTC 2018
能夠發現,他們相隔了8小時。微信
因此,只須要容器時區和宿主一致便可。ui
共享主機的localtime (方法一)阿里雲
建立容器的時候指定啓動參數,掛載localtime文件到容器內 ,保證二者所採用的時區是一致的。日誌
docker run --name <name> -v /etc/localtime:/etc/localtime:ro
複製主機的localtime (方法二)code
docker cp /etc/localtime:【容器ID或者NAME】/etc/localtime
在完成後,再經過date命令進行查看當前時間。blog
建立自定義的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命令生成鏡像使用便可。
在容器和宿主一致後,在滿懷欣喜的重啓容器後,發現最後時間仍是不對。。發現tomcat輸出的日誌仍是不一致的,這人生就很尷尬了。。
在tomcat/bin/catalina.sh文件中修改tomcat JAVA_OPTS,添加以下內容
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"
自此,問題解決。訪問第三方應用也一切正常了,它真的是莫名躺槍了。哈哈哈
499452441
lqdevOps
本文地址:https://blog.lqdev.cn/2018/07/15/docker/docker-time-diff/