更新时间:2025-07-11 GMT+08:00
设置容器的时区
在使用容器的过程中,如果需要获取系统时间来进行日志记录、数据库存储等操作,容器内部时区不一致的问题可能会导致一系列的困扰。本文提供了多种解决容器内时区不一致问题的方案,请根据实际情况选择合适的方案进行操作。
场景一:容器与节点时区同步
- 登录CCE控制台。
- 在创建工作负载基本信息页面,开启“时区同步”,即容器与节点使用相同时区。完成其余配置后,创建该工作负载。
图1 开启时区同步
- 登录节点查询时区。
date -R
命令行终端显示如下信息:
Sat, 12 Apr 2025 16:58:47 +0800
- 查询容器时区是否与节点保持一致。
使用kubectl命令查询Pod名称:
kubectl get pod
使用kubectl命令进入容器,其中<pod_name>为上一步中查询的Pod名称:
kubectl exec -it <pod_name> -- /bin/bash
查询容器时区:
date -R
命令行终端显示如下信息:
Sat, 12 Apr 2025 16:59:23 +0800
场景二:制作容器镜像时指定时区
在构建容器镜像时,您可以在Dockerfile中设置时区文件,以解决单一容器内的时区不一致问题。在后续使用该镜像时,也不会再受到时区问题的困扰。
本文以制作CentOS容器镜像为例,介绍如何在制作容器镜像时指定时区。
- 登录一台已安装Docker且支持访问公网的虚拟机。
- 执行以下命令,新建Dockerfile文件。
vim Dockerfile
- 按i切换至编辑模式,写入以下内容,配置时区文件。
FROM centos RUN rm -f /etc/localtime \ && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone
按Esc,输入:wq,保存文件并返回。
- 执行以下命令,构建容器镜像。
docker build -t centos:v1 -f Dockerfile .
- 查询当前节点时区。
date -R
命令行终端显示如下信息:
Sat, 12 Apr 2025 17:23:44 +0800
- 查询容器时区是否与节点保持一致。
启动容器镜像并查看容器内时区,其中centos:v1为创建的容器镜像:
docker run -it centos:v1 /bin/sh
查询容器时区:
date -R
命令行终端显示如下信息:
Sat, 12 Apr 2025 17:25:13 +0800
场景三:Java容器日志与容器、节点时区同步
开启容器和节点时区同步后,在容器中通过date -R命令获取的容器标准时间与节点保持一致。但是在Java应用中,Java使用系统默认时区来处理日期和时间,日志记录的时间仍可能与容器时间存在时区差异。以下步骤将通过Tomcat容器作为示例,详细介绍如何实现Java容器日志时间与节点时区的同步。
- 登录CCE控制台。
- 在创建工作负载基本信息页面,开启“时区同步”,即容器与节点使用相同时区。
图2 开启时区同步
- 在“容器配置 > 环境变量”中添加以下环境变量:
- 环境变量名称:CATALINA_OPTS
- 环境变量值:-Duser.timezone=GMT+08
- 完成其余配置后,创建该工作负载。
- 单击工作负载栏中的“日志”按钮,查看日志中的时区是否与节点/容器同一时区。节点和容器的时区查看方式请参见场景一:容器与节点时区同步。