Linux或者Docker中时区查询和修改(差8小时问题)

前因:

当我们在Linux或者Docker中部署程序时(无论.Net或者Java或者等等)获取系统时间时(例如C# DateTime.Now),和北京时间差8小时。

解决:

一、版本1

先放几个Linux下常用命令:

1、查看当前时间

cs 复制代码
date

输出 :

bash 复制代码
Tue Nov 26 09:25:29 CST 2024

2、查看详细时间

cs 复制代码
timedatectl status

输出:

bash 复制代码
Local time: Mon 2024-11-25 17:59:14 CST
Universal time: Mon 2024-11-25 09:59:14 UTC
RTC time: Mon 2024-11-25 09:59:14
Time zone: Asia / Shanghai(CST, +0800)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n / a

3、容器外查看Docker容器中时间

cs 复制代码
docker exec bc09f80ab449 date

其中 bc09f80ab449 是容器ID,通过Docker ps获取

4、进入Docker容器

cs 复制代码
docker exec -it bc09f80ab449 bash 
或者
【docker exec -it 容器ID /bin/bash】命令进入Docker容器内

执行【date】命令查看Docker容器的时间发现与宿主机有误差时,修改时间和时区。

5、修改Docker容器中时区

cs 复制代码
方法一:在【宿主机】中执行命令,【docker cp /etc/localtime 容器ID:/etc/localtime】,重启Docker容器。

方法二:在【宿主机】中执行命令,【docker cp  /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime】,重启Docker容器。

方法三:在【容器】中执行命令,【ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime】,重启Docker容器。

创建容器时,直接用宿主机器上的时区默认覆盖容器内的时区配置文件,也就是跟宿主机器同样的时区配置

复制代码
docker run id -v /etc/localtime:/etc/localtime:ro  镜像名

但是发现通过java中new Date()获取到的仍然是容器默认的时区,因为java是通过获取timezone来设置时间的,所以容器也需要设置时区。

复制代码
/* 这里配置的环境变量 Asia/Shanghai就是我所需要的时区 */
# docker run -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro 镜像名

二、版本2

第一步:

备份原来的时区信息

cs 复制代码
[root@localhost ~]# mv /etc/localtime localtime.bak

第二步:

通过软链接将亚洲/上海 的时区信息 指导时区信息

cs 复制代码
[root@localhost ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

第三步:

验证

cs 复制代码
[root@localhost ~]# date
2024年 07月 17日 星期三 14:35:12 CST

可以看到时区修改为CST,也就是正常的北京时间(东八区)

相关推荐
Alex艾力的IT数字空间3 小时前
在 Kylin(麒麟)操作系统上搭建 Docker 环境
大数据·运维·缓存·docker·容器·负载均衡·kylin
嵌入式学习和实践3 小时前
虚拟机 Ubuntu 磁盘扩容完全指南:从原理到实践,一步到位
linux·ubuntu·磁盘扩容
陳10303 小时前
Linux:进程间切换与调度
linux·运维·服务器
lcreek3 小时前
Linux 虚拟文件系统的建立与使用全过程解析
linux·虚拟文件系统·vfs
寒秋花开曾相惜4 小时前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
疏星浅月4 小时前
虚拟内存三大核心作用详解
linux·c语言·arm开发·嵌入式硬件
邂逅星河浪漫5 小时前
【银行内网开发-管理端】Vue管理端+Auth后台开发+Nginx配置+Linux部署(详细解析)
linux·javascript·css·vue.js·nginx·html·前后端联调
JJay.5 小时前
Android BLE 稳定连接的关键,不是扫描,而是 GATT 操作队列
android·服务器·前端
SilentSamsara5 小时前
TCP 三次握手:连接建立失败的那些坑
运维·服务器·网络·网络协议·tcp/ip
码农小钻风6 小时前
利用Samba实现局域网跨平台共享文件
linux·samba·共享