news 2026/3/3 10:17:19

【Docker】解决Docker容器时间与宿主机时间不一致的几种方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Docker】解决Docker容器时间与宿主机时间不一致的几种方法

一、介绍

由于Docker容器内的时间默认是 UTC 世界标准时间,而宿主机时间为 CST 中国标准时间(东八区,Asia/Shanghai),时间相差8小时,根本原因是时区问题。因此,需要为Docker容器配置正确的时区,让容器内的时间与宿主机(或中国标准时间)保持一致。

二、解决方法

方法一:已运行的容器修改时区文件

1、进入容器dockerexec-it 容器ID/容器名称 /bin/bash2、修改时区文件# 备份容器默认时区文件mv/etc/localtime /etc/localtime.bak# 创建软链接,将系统时区指向上海时区ln-sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 修改时区文件echo"Asia/Shanghai">/etc/timezone

这个方法的核心是修改容器内部的系统级时区配置,所有修改都是写入容器的文件系统中,容器的文件系统是持久化的(除非手动删除容器),因此重启容器、重启Docker、宿主机重启,时区都不会变。

方法二:创建新容器时挂载时区文件

dockerrun -d\-v /etc/localtime:/etc/localtime:ro\-v /etc/timezone:/etc/timezone:ro\--name 容器名称 镜像名称

参数解释:
/etc/localtime:Linux系统的「本地时区配置文件」,软链接文件,指向具体的时区文件
/etc/timezone:Linux系统的「时区文本配置文件」,部分程序会读取这个文件
ro:表示只读挂载,避免容器修改宿主机文件,提升安全性,建议加上

这个方法的核心是通过 Docker 的 -v 挂载参数,将宿主机的本地时区文件,直接挂载到容器内部对应的系统时区文件位置,让容器和宿主机共用同一个时区配置。

方法三:创建新容器时指定时区环境变量

dockerrun -it -eTZ=Asia/Shanghai ubuntu

注意:部分极简镜像(如 Alpine)可能需要先安装 tzdata 包才能识别 TZ 变量,否则时区设置不生效。

方法四:Dockerfile构建镜像时指定时区

1、编写Dockerfile文件

# 基础镜像FROM ubuntu:latest# 备份原时区文件RUNmv/etc/localtime /etc/localtime.bak# 创建软链接RUNln-snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 修改时区文件RUNecho"Asia/Shanghai">/etc/timezone# 启动容器RUNaptupdate&&aptinstall-y nginx CMD["nginx","-g","daemon off;"]

2、构建构建镜像+创建容器

# 构建镜像dockerbuild -t 自定义镜像名称:版本.# 创建容器dockerrun -d --name 容器名称 自定义镜像名称:版本

这个方法的核心是使用Dockerfile构建的镜像指定了正确时区,因此基于该镜像创建的所有容器,默认就是正确时区,重启100%不失效。

三、查看容器时间

dockerexec容器ID/名称date输出显示CST即为正确时间

四、其他问题

问题1:

为什么在容器内直接执行命令 date -s “2026-01-19 16:30:00” 后, 时间并没有生效?

答:这种方式是临时修改系统时间,不是修改时区。而且容器的系统时间默认和宿主机同步,手动修改后,会被宿主机时间覆盖,重启容器后立刻还原,这是错误的做法,千万不要用!

问题2:

时区修改成功后,容器内的应用(Java/MySQL/Nginx)时间还是错的?

答:分2种情况解决:

  • Java应用:Java虚拟机默认会读取系统时区,但部分Java程序会硬编码时区,此时需要在启动命令加参数:java -Duser.timezone=Asia/Shanghai -jar xxx.jar
  • MySQL容器:MySQL默认读取系统时区,但需要在配置文件中指定 default-time-zone = ‘+8:00’,或启动时加参数 --default-time-zone=+8:00

问题3:

宿主机时区本身就是错的,怎么办?

答:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo “Asia/Shanghai” > /etc/timezone

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/2 17:43:05

one_channel_hub 移植到CH584M MCU平台(移除WiFi/网络相关代码)

one_channel_hub 移植到CH584M MCU平台(移除WiFi/网络相关代码) 一、移植前准备 1. 核心背景 CH584M特性:沁恒微的低功耗MCU,基于RISC-V架构,内置BLE 5.0,无WiFi外设,需适配其裸机/轻量级RTOS开…

作者头像 李华
网站建设 2026/2/28 19:44:55

JDK版本的区别

在IDEA中新建Spring Boot项目时,需要选择JDK版本,这里小记一下: Oracle OpenJDK Oracle 官方维护的开源免费JDK,Java标准实现。 Amazon Corretto 亚马逊基于 OpenJDK 定制的免费、长期支持JDK。 JetBrains Runtime JetBrains&…

作者头像 李华
网站建设 2026/2/25 14:22:34

2024年AI原生应用开源数据集推荐:高质量训练数据获取+处理全攻略

2024 年 AI 原生应用开源数据集推荐:高质量训练数据获取 处理全攻略 摘要/引言 在当今 AI 蓬勃发展的时代,高质量的数据集对于训练出强大且精准的 AI 原生应用至关重要。然而,如何获取合适的开源数据集,并对其进行有效的处理&a…

作者头像 李华
网站建设 2026/3/3 9:27:47

Java计算机毕设之基于Springboot+MySQ基于springboot的个人健康管理系统基于SpringBoot + Vue的个人运动健康管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/3 7:37:14

提示工程架构师如何解决prompt优化的瓶颈?这篇给你答案!

从瓶颈到突破:提示工程架构师的Prompt优化实战指南 引言:你是否也在经历这些Prompt优化的“至暗时刻”? 凌晨三点,你盯着屏幕上的LLM输出,第17次修改Prompt——从“写一篇感人的产品文案”到“写一篇面向职场妈妈的婴…

作者头像 李华
网站建设 2026/3/4 0:00:06

【开题答辩全过程】以 基于web的生鲜农产品信息管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华