修改Docker容器的时间和宿主时间一致

在使用docker时,发现时间和宿主机的时间相差8小时

  • 宿主机使用的是CST时间
  • 容器使用的是UTC时间

1、查看宿主机时间

docker时间和宿主机时间 springboot日志时间慢8小时 docker 设置时间_时间同步


当发现宿主机时间不符时,我们可以使用两种方法来修改时间

  • 系统时间修改
date -s [修改时间] 
#将系统日期设定为2021年04月06日
date -s 04/06/2021
#时间设为11:39:09
date -s 11:39:09

修改完后执行:clock -w ,强制将时间写入COMS!

  • 时区修改
date -R [先查看时区] 
# 修改时区 将Asia/shanghai-上海时区写入当前时区
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
# cp -f 修改时区可能报错 需要使用ln -sf
ln -sf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
#提示是否覆盖 输入Y回车 然后date查看时区和时间(CST,中国时区)

注意: 修改之后,需要将时间强制写入COMS! 否则重启之后又会还原

2、查看容器时间

  • 先进入容器,并查看容器时间
docker exec -it [CONTAINER ID] /bin/bash
  • 容器时间与宿主机的时间不同,修改时间
cd /etc/
#在容器中修改下/etc/localtime文件的名称,避免冲突。
mv localtime localtime_old
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

宿主主机和容器时间一致

3、timedatectl相关命令

  • 显示系统的当前时间和日期 timedatectl
  • docker时间和宿主机时间 springboot日志时间慢8小时 docker 设置时间_服务器_02

  • 查看当前时区 timedatectl | grep Time
  • docker时间和宿主机时间 springboot日志时间慢8小时 docker 设置时间_服务器_03

  • 查看所有可用的时区 timedatectl list-timezones
  • 根据地理位置找到本地的时区 timedatectl list-timezones | egrep -o "Asia/S.*"
  • docker时间和宿主机时间 springboot日志时间慢8小时 docker 设置时间_时间同步_04

  • 在Linux中设置本地时区 timedatectl set-timezone "Asia/Shanghai"
  • 使用和设置协调时间 timedatectl set-timezone UTC
  • 设置日期和时间 timedatectl set-time '12:16:40 2021-04-06'
  • 只设置日期 timedatectl set-time 20210406
  • 只设置时间 timedatectl set-time 12:16:40
  • 将Linux系统时钟同步到远程NTP服务器

NTP即Network Time Protocol(网络时间协议),是一个互联网协议,用于同步计算机之间的系统时钟。timedatectl实用程序可以自动同步你的Linux系统时钟到使用NTP的远程服务器。

注意,必须在系统上安装NTP以实现与NTP服务器的自动时间同步。

  • 开启自动时间同步到远程NTP服务器 timedatectl set-ntp true
  • 禁用NTP时间同步到远程NTP服务器 timedatectl set-ntp false