docker中解决DB2的系统时间时区问题

Dcoker Linux
作者:dulucy
发布时间:2025-05-10 23:10:53
docker中解决DB2的系统时间时区问题

问题描述

今天在进行开发的时候发现数据库中的日志数据时间插入的不正常,明明是12点,但是数据库中查询出来接结果是3点,排查了一遍,发现使用

select current date from sysibm.sysdummy1;

在数据库工具查询的结果也是3点。数据插入的sql是这样的:

create_time=current_timestamp

因此这个问题还是在数据库中的问题。

考虑到数据库中的时间是根据所在系统获取的,本地电脑时区正常,考虑到DB2数据库实在docker中运行,因此考虑是docker容器的系统时间不正确。

通过 date -R 查询宿主机的时间是零时区时间,在网上查询到可以如下改变时区 image.png

经过这一操作后,发现宿主机的时区确实变成了东8区时间,但是在系统重新插入数据,在查询发现插入的时间仍然是零时区时间,一度怀疑是拉下来的DB2镜像问题导致的。与同事探讨同事认为这是系统时间的问题,不过不是宿主机的的时间,而是容器的时区问题。

顺着这个思路,同事开始修改容器的时区: image.png

解决办法

1、连接容器DB2

docker exec -u 0 -it 容器ID /bin/bash

2、查询/etc/localtime对应的信息

ll /etc/locatime

3、将 /usr/share/zoneinfo/Asiz/Shanghai 这个信息写入 /etc/localtime

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4、重启 reboot

reboot

5、测试

image.png

再测试插入数据发现时间已经正常了。由此可见,docker中影响DB2的系统时间是容器的时间。

其他办法

在写这篇文章做记录的时候,查到了另外的两种方式,可以改变容器的时间:

1、在【宿主机】中执行命令:

docker cp /etc/localtime 容器ID:/etc/localtime
reboot

2、在【宿主机】中执行命令,

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime
reboot

这两个方法没有实验,不过应该是没有问题的,都是重写 /etc/localtime 的内容,不过需要注意的时,宿主机的时区也有可能不是东八区时区。建议先确定宿主机的时区,在进行操作。