Docker 容器内时区错位排查:从 UTC 到 CST 与宿主机时间同步实操

举报
yd_218612773 发表于 2026/11/04 10:31:08 2026/11/04
【摘要】 部署上线后发现日志时间和数据库写入时间均比北京时间慢 8 小时。本文梳理常见容器基础镜像的时区调整方法与 Dockerfile 最佳实践。

将一个 Spring Boot / Node.js 镜像打包部署后,查看业务打印的日志发现时间总是不对劲,比如当前北京时间是 16:00,日志里打印的时间却是 08:00,整整相差 8 个小时。

一、原因定位

大部分官方基础镜像(如 Alpine、Ubuntu、Debian)默认采用 UTC(世界协调时)时区,而我们国内采用的是东八区 CST(UTC+8)。

进入容器运行 date 验证:

docker exec -it my_container date
Mon Oct 28 08:24:12 UTC 2026

确认容器内确实使用的是 UTC 时区。

二、不同场景下的修复方案

1. 快速临时方案:挂载宿主机 localtime

在 docker run 或 docker-compose.yml 中挂载宿主机的时区文件:

docker run -d \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  --name my_app my_image:latest

2. 根本解决:在 Dockerfile 构建阶段固化时区

针对 Alpine 镜像:

FROM alpine:3.18
RUN apk add --no-cache tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata

针对 Debian/Ubuntu 镜像:

FROM debian:bullseye-slim
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

重新构建部署后再次执行 date,时区正确显示为 CST,日志与数据库时间恢复同步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。