设置 Docker 容器时间与宿主机的一致
在创建 Docker 容器时,加上 “-v /etc/localtime:/etc/localtime:ro” 参数,让容器使用宿主机的时间,容器时间与宿主机时间同步。比如创建一个 Tomcat 容器:
# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -d -p 8686:8686 tomcat
054f35167ec52b14952bcddeb8d1ae3f2ed508569d1e79095687a211115f5149
其中 “-v /etc/localtime:/etc/localtime:ro” 表示让容器使用宿主机的时间时区。
-v 标签为容器添加 volume,后面的 :ro 指定该 volume 为只读。
注意:如果容器中指定的挂载目录存在相同的文件时,会被宿主机覆盖掉。
如果没加 “-v /etc/localtime:/etc/localtime:ro” 参数,容器就使用了默认的时区,时间就可能与宿主机的不一致,这种情况不需重建容器也是有解决办法的。
查看宿主机日期:
# date
Tue Apr 9 15:26:53 CST 2019
查看宿主机 /etc/localtime 文件:
# more /etc/localtime
TZif2
CST-8
进入容器:
# docker exec -it <容器ID或者容器NAME> /bin/bash
查看容器的日期:
# date
Tue Apr 9 7:27:30 CST 2019
比宿主机晚了8小时。
备份容器的 /etc/localtime 文件:
# cp /etc/localtime /etc/localtime.bak0
然后退出容器。
拷贝宿主机的 /etc/localtime 文件到容器的 /etc 目录下:
# docker cp /etc/localtime <容器ID或者容器NAME>:/etc/
然后重新启动容器。
再进入容器:
# docker exec -it <容器ID或者容器NAME> /bin/bash
查看容器的日期:
# date
Tue Apr 9 15:28:35 CST 2019
时间已与宿主机同步。
顺便查看一下容器的 localtime 文件:
# ls /etc/localtime*
/etc/localtime /etc/localtime.bak0
localtime.bak0 是事先备份的 localtime 文件。
localtime文件内容:
# more /etc/localtime
TZif2
CST-8
容器的 localtime 文件内容与宿主机的 localtime 文件一致,说明拷贝成功。
Ok,完毕!