在Docker容器建立好以後,可能會發現容器時間跟宿主機時間不一致,這就須要同步它們的時間,讓容器時間跟宿主機時間保持一致。html
轉載自:https://www.cnblogs.com/kevingrace/p/5570597.htmlnginx
宿主機時間
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。