惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
博客园 - Franky
J
Java Code Geeks
V
Visual Studio Blog
G
Google Developers Blog
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
博客园 - 【当耐特】
IT之家
IT之家
I
InfoQ
U
Unit 42
C
Check Point Blog
Martin Fowler
Martin Fowler

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
Docker 容器时区不对,`timedatectl` 不存在怎么办?
AlfredZhao · 2026-06-22 · via 博客园_首页

2026-06-22 18:08  AlfredZhao  阅读(0)  评论()    收藏  举报

Docker 封装出来的系统,经常会遇到时区不对的问题。新建容器时,有些环境可以直接通过 docker run 增加参数解决:

-e 'TZ=Asia/Shanghai'

但如果容器已经在本地修正和使用过很多次,不适合删除后重新 run,那就需要在现有容器里直接处理。

01 | 为什么 timedatectl 会失败?

笔者进入容器后,尝试按常规方式修改时区:

timedatectl set-timezone Asia/Shanghai

结果直接报错:

bash: timedatectl: command not found

当前环境信息如下:

uname -a
Linux ora26ai 5.15.0-316.196.4.2.el8uek.x86_64 #2 SMP Thu Feb 5 10:42:53 PST 2026 x86_64 GNU/Linux

这是因为 Docker 容器内,尤其是基于 Oracle Linux / RedHat 的最小化镜像,为了精简体积,通常没有安装 systemd。所以 timedatectl 这个命令不存在,也就不能用它来改时区。

02 | 直接修改 /etc/localtime

在容器中修改时区,最直接有效的方式,是修改本地时区文件或软链接。

如果容器内已经存在时区数据库,比如 /usr/share/zoneinfo/Asia/Shanghai,可以在容器 root 权限下执行:

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date

前两行命令会删除原有本地时区配置,并把上海时区链接到 /etc/localtime。最后用 date 验证时间是否已经变成 CST,也就是中国标准时间。

03 | 如果没有 Asia/Shanghai 文件怎么办?

有些 Docker 环境里,执行上面的方法会发现缺少:

/usr/share/zoneinfo/Asia/Shanghai

这时只复制宿主机的 /etc/localtime 可能还不够,因为容器内本质上缺少对应的时区数据库文件。

可以从宿主机复制上海时区文件到容器内。假设容器名是 vis-server,先创建目录:

docker exec -it vis-server mkdir -p /usr/share/zoneinfo/Asia

再把宿主机的时区文件复制进去:

docker cp /usr/share/zoneinfo/Asia/Shanghai vis-server:/usr/share/zoneinfo/Asia/Shanghai

之后再进入容器,重新执行:

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date

这样就可以在不重建容器的情况下,把 Docker 容器时间对齐到北京/上海时间。

关注我,和AI一起成长~