關於docker下容器和宿主機器時間不一致問題

在前幾天,在阿里雲的ECS上部署一個docker應用時,發現部署的應用在請求第三方應用時,一直出現超時的異常提示,剛開始覺得是第三方應用系統的問題(此係統無賴躺槍,反正也不是一次兩次了,多躺幾回也就習慣了~),最後發現是容器的時間和數組的時間不一致,差了八小時。在上網查閱相關資料後,問題解決。這裏就簡單作個記錄下。redis


Docker容器時間與主機時間不一致

經過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小時。微信

  • CST應該是指(China Shanghai Time,東八區時間)
  • UTC應該是指(Coordinated Universal Time,標準時間)

因此,只須要容器時區和宿主一致便可。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命令生成鏡像使用便可。

Docker容器時間與tomcat時間不一致

在容器和宿主一致後,在滿懷欣喜的重啓容器後,發現最後時間仍是不對。。發現tomcat輸出的日誌仍是不一致的,這人生就很尷尬了。。

在tomcat/bin/catalina.sh文件中修改tomcat JAVA_OPTS,添加以下內容

JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"

自此,問題解決。訪問第三方應用也一切正常了,它真的是莫名躺槍了。哈哈哈

老生常談

  • 我的QQ:499452441
  • 微信公衆號:lqdevOps

我的博客:https://blog.lqdev.cn

本文地址:https://blog.lqdev.cn/2018/07/15/docker/docker-time-diff/

撤~

相關文章
相關標籤/搜索