Docker 容器时区不对,`timedatectl` 不存在怎么办?

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

bash 复制代码
-e 'TZ=Asia/Shanghai'

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

01 | 为什么 timedatectl 会失败?

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

bash 复制代码
timedatectl set-timezone Asia/Shanghai

结果直接报错:

bash 复制代码
bash: timedatectl: command not found

当前环境信息如下:

bash 复制代码
uname -a
bash 复制代码
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 权限下执行:

bash 复制代码
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date

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

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

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

bash 复制代码
/usr/share/zoneinfo/Asia/Shanghai

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

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

bash 复制代码
docker exec -it vis-server mkdir -p /usr/share/zoneinfo/Asia

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

bash 复制代码
docker cp /usr/share/zoneinfo/Asia/Shanghai vis-server:/usr/share/zoneinfo/Asia/Shanghai

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

bash 复制代码
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date

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

关注我,和AI一起成长~

相关推荐
DYWorker0013 小时前
搭建嵌入式Linux虚拟机开发环境
linux
weipt3 小时前
从ollama到llama.cpp
linux·服务器·llama
加油码3 小时前
动静态库的链接底层原理(进阶版)
linux·c++
H_oRIZoN_4 小时前
Linux入门DAY23(C语言树形结构)
linux·c语言·数据结构
kdxiaojie4 小时前
Linux USB驱动阅读笔记(1)
linux·笔记·学习·usb
JacksonMx5 小时前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python
byte轻骑兵5 小时前
【BlueZ 】蓝牙 SDAP 协议入门:BlueZ 中设备服务发现的基础逻辑
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
mounter6256 小时前
GCCRS 突破与 Rust 入核:Linux 工具链的重大变革
linux·开发语言·rust·linux kernel·kernel
lxw20230271168 小时前
k8s安装部署(利用ansible)
linux·kubernetes·ansible
爱和冰阔落8 小时前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓