Docker 容器时区不对,`timedatectl` 不存在怎么办? 但如果容器已经在本地修正和使用过很多次不适合删除后重新run那就需要在现有容器里直接处理。01 | 为什么timedatectl会失败笔者进入容器后尝试按常规方式修改时区timedatectl set-timezone Asia/Shanghai结果直接报错bash: timedatectl: command not found当前环境信息如下uname -aLinux 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/localtimeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate前两行命令会删除原有本地时区配置并把上海时区链接到/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/localtimeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate这样就可以在不重建容器的情况下把 Docker 容器时间对齐到北京/