Linux/Docker 修改系统时区

操作环境:

  • CentOS / AlmaOS
  • MySQL Docker 镜像

1. Linux 系统

1.1 通过 timedatectl 命令操作

  1. 使用 timedatectl list-timezones 命令列出可用的时区列表,以便选择要设置的时区。

  2. 使用 timedatectl set-timezone 命令设置所选的时区。

    例如,要将时区设置为 “Asia/Shanghai”,您可以执行以下命令:

    sudo timedatectl set-timezone Asia/Shanghai
    
  3. 使用 timedatectl 命令验证时区设置是否已经生效:

    timedatectl
    

    将看到类似以下输出:

    Local time: Tue 2024-02-20 16:36:57 CST
    Universal time: Tue 2024-02-20 08:36:57 UTC
    RTC time: Tue 2024-02-20 08:36:57
    Time zone: Asia/Shanghai (CST, +0800)
    
    System clock synchronized: yes
    NTP service: active
    RTC in local TZ: no
    

    这表明时区已经成功设置为 "Asia/Shanghai"

  4. 还可以通过 date 命令查看系统时间

    date
    # 输入如下:
    Tue Feb 20 16:41:03 CST 2024
    

1.2 直接修改 /etc/localtime 文件

如果 Linux 系统中没有 timedatectl 命令,也可以手动修改 /etc/localtime 文件来设置时区。

  1. 例如,要将时区设置为 “Asia/Shanghai”,可以执行以下命令:

    sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    

    这将创建一个指向 /usr/share/zoneinfo/Asia/Shanghai 文件的符号链接,使时区设置为 “Asia/Shanghai”。

  2. 最后,确保系统时间和硬件时间同步:

    sudo hwclock --systohc
    

    【注】hwclock 是一个 Linux 命令,用于管理系统的硬件时钟(Hardware Clock)。硬件时钟是计算机硬件中的一个部分,用于记录系统时间。它通常是一个独立于操作系统的时钟电路,能够在系统关闭时保持运行,并持续记录时间

  3. 通过 date 命令查看系统时间

    date
    # 输入如下:
    Tue Feb 20 16:41:03 CST 2024
    

2. Docker 容器中的 Linux

如需创建时指定时区请参阅Docker 创建容器并指定时区

下面的操作仅针对于已创建的容器

一般 Docker 容器中的 Linux 都是最小化安装的,没有太多软件集,如果需要某些命令没有的话,也可以自己安装,但是会影响到容器的部分性能;而且该操作仅在此容器有效,在其他服务器运行镜像的时候就需要重新安装。

毕竟 Docker 容器中的也是 Linux,所以与上面直接操作 Linux 系统的方式是一样的;下面以 直接修改 /etc/localtime 文件 为例:

  1. 先进入到容器中,

    # 通过容器名称
    docker exec -it containerName bash 
    # 或通过容器的 id 标识 
    docker exec -it containerId bash 
    

    docker exec 更详细的操作参考:Docker 进入容器,并在容器内执行命令

  2. 例如,要将时区设置为 “Asia/Shanghai”,可以执行以下命令:

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    

    这将创建一个指向 /usr/share/zoneinfo/Asia/Shanghai 文件的符号链接,使时区设置为 “Asia/Shanghai”。

  3. 重启容器

    docker restart 容器名
    
  4. 然后进入容器,并通过 date 命令查看系统时间

    date
    # 输入如下:
    Tue Feb 20 16:41:03 CST 2024
    

【注】这个操作仅在这个容器中有效,通过镜像新创建容器的时区还是会有问题,所以建议创建的时候直接指定时区,方法参考:Docker 创建容器并指定时区

在这里插入图片描述