修改Docker容器内的时间(实践有效版)

亲测有效,请仔细阅读解决问题的场景,希望能够帮助到你

文章目录


面对问题

Docker部署的容器大多默认采用UTC时间,所以一旦没注意容易发生关于时间性的错误,如应用启动的时间错误或是部署的数据库日志记录不对,导致出现问题或是展示无法正确的核对上对应真实的服务器时间。


解决方案

网上给出的解决方案良莠不齐,而且很多没有效果,现在笔者给出两个亲测有效的解决方案。

一、创建时候的解决方案

一般都是事后诸葛发现的,如果你有幸在部署的时候看到这篇文章,那么你就能避免很多问题了。

bash 复制代码
docker run -e TZ=Asia/Shanghai --name 容器名 -d 镜像名

默认你是按亚洲上海时间开发哦,当然你是别的时区的话,这个TZ改成你对应的时区亲,然后容器部署的时候参数不止这么点的,你根据业务需要添加其他的参数在这上面,这样就保证了启动的时区在你指定的时区,但一般我采用的方法二事后补救措施,这个用于你已经部署完,而且迁移或重新部署比较麻烦的情况下

二、部署完成后的解决方案

当容器已经部署起来的时候,别慌还有救,下面是针对已经部署完的容器的解决方案。

可以先进入容器,然后手动设置时区的。对于大多数的镜像(基于Unix如Ubuntu、Debian),可以使用以下步骤:

查看在跑的容器

docker ps

进入容器查看当前时间

进入容器

bash 复制代码
docker exec -it 容器ID或容器名字 /bin/bash 

查看时间

bash 复制代码
date

可以看下容器时间,是不是笔者所说的问题,如果和服务器时间对得上,那你就不是这类问题,请你再去检索正确答案,如果是的话,请继续往下走。

设置时间

bash 复制代码
echo "Asia/Shanghai" > /etc/timezone

如果遇到没有文件报错,可以先mkdir /etc/timezone这个文件夹

如果遇到权限报错,可以exit退出容器,使用root权限指令进入容器

bash 复制代码
docker exec -u root -it [容器名称或ID] /bin/bash

然后再次操作

bash 复制代码
echo "Asia/Shanghai" > /etc/timezone

设置软链接挂到时区

bash 复制代码
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

然后在查看时区确认是否有无改变

bash 复制代码
date

如果改变,那就重启容器使它生效,注意有些情况不重启容器是无法生效的,所以这步也很重要restart一下。

bash 复制代码
docker restart 容器名或id

这样docker容器时区问题已经被解决了。

总结

希望能够帮助到你,欢迎交流记录更多更好有效的方案。

相关推荐
Java.熵减码农15 分钟前
解决Linux修改环境变量后导致登录循环进不去系统的问题
linux·运维·服务器
明天好,会的41 分钟前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
猫头虎1 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕1 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
黎陌MLing2 小时前
docker安装管理TDengine
docker·容器·tdengine
HIT_Weston2 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿2 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin2 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
SelectDB3 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache
❀͜͡傀儡师3 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器