作为Linux运维,你是不是也遇到过这种糟心场景:容器里日志时间和宿主机差了8小时,排查问题时连时间线都对不上?为什么容器时间会不同步?因为Docker容器默认使用UTC时区(0时区),而国内宿主机一般是CST(东8区),两者差8小时。加上容器默认隔离宿主机的系统文件,所以会出现时间不一致。知道了原因,当然就有相应的办法解决。今天就来篇水文,简单讲下Docker容器与宿主机时间同步的3种方法。一、测试环境临时手动复制时区文件,把主机的时区文件复制到容器(不用进容器操作)# 直接将宿主机时区文件复制到容器的localtimedocker cp /usr/share/zoneinfo/Asia/Shanghai 容器名:/etc/localtime
注意:这种方法重启容器后会失效,适合测试环境临时用下。二、启动容器时挂载时区文件,这是Linux运维最常用的持久化方案,启动容器时直接挂载宿主机的时区相关文件:# 启动时挂载localtime和timezone(推荐同时挂两个)docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v /etc/timezone:/etc/timezone:ro \ --name 容器名 镜像名
这个方法的优点是容器重启后时间依然同步,不用动容器内部文件。FROM 基础镜像# 1. 安装tzdata(部分基础镜像可能没有)RUN apt update && apt install -y tzdata \ # 2. 设置时区为上海 && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone# 镜像指令...
构建镜像后,用这个镜像启动的所有容器,默认时间就是上海时区。就问你牛不牛?