在Docker容器建立好之後,可能會發現容器時間跟宿主機時間不一致,這就需要同步它們的時間,讓容器時間跟宿主機時間保持一致。如下:
宿主機時間 [root@slave-1 ~]# date Fri May 12 11:20:30 CST 2017 容器時間 [root@slave-1 ~]# docker exec -ti 87986863838b /bin/bash root@87986863838b:/# date Fri May 12 03:20:33 UTC 2017 發現兩者之間的時間相差了八個小時! 宿主機採用了CST時區,CST應該是指(China Shanghai Time,東八區時間) 容器採用了UTC時區,UTC應該是指(Coordinated Universal Time,標準時間) 統一兩者的時區有下面幾種方法 1)共享主機的localtime 建立容器的時候指定啟動引數,掛載localtime檔案到容器內,保證兩者所採用的時區是一致的。 # docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash 2)複製主機的localtime [root@slave-1 ~]# docker cp /etc/localtime 87986863838b:/etc/ 然後再登陸容器,檢視時間,發現已經跟宿主機時間同步了 [root@slave-1 ~]# docker exec -ti 87986863838b /bin/bash root@87986863838b:/# date Fri May 12 11:26:19 CST 2017 3)建立dockerfile檔案的時候,自定義該映象的時間格式及時區。在dockerfile檔案裡新增下面內容: ...... 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命令生成映象使用即可,使用dockerfile建立的映象的容器改變了容器的時區,這樣不僅保證了容器時間與宿主機時間一致(假如宿主機也是CST),並且像上面使用tomcat作為父映象的話,JVM的時區也是CST,這樣tomcat的日誌資訊的時間也是和宿主機一致的,像上面那兩種方式只是保證了宿主機時間與容器時間一致,JVM的時區並沒有改變,tomcat日誌的列印時間依舊是UTC。