高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

docker容器时间修改-通过时区偏移量

目录

我们知道docker容器的时间使用的是宿主机内核的时间,没有做date namespace,所以修改docker容器时间的时候,同时修改了宿主机的时间,反之一样。
如果需要在容器内做时间修改,但是不影响其他容器,就比较困难。
but,我们可以通过修改时区的方式间接修改时间,但是有局限性,只能修改到24h之内的时间。

这边写了个脚本,date.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash
if [ $# != 2 ]
then
echo "Please input two parameter,like '2016-05-20 12:00' "
exit 200;
fi
#check /etc/profile exits 'export TZ' environment,if exits ,delete
function checkProfile(){
returnStr=`grep -ri 'export TZ' /etc/profile`
if [ "$returnStr" != "" ]
then
sed -i -e '/export TZ/d' /etc/profile

fi
}
checkProfile
#check time format
function isValidDate(){
date -d "$1" "+%F"|grep -q "$1" 2>/dev/null
if [ $? = 0 ]; then
echo "input:" $1 $2
else
echo "Time format is not correct ,please input like '2016-05-20 12:00' "
fi
}
isValidDate $1 $2
CURTIME=`date "+%Y-%m-%d %H:%M" `;
echo "now:" $CURTIME
function timeExport(){
if [ "$2" == 1 ]
then
timeFormat=`awk 'BEGIN{printf "%.2f\n",'$1'/3600}'`
echo $1
echo $timeFormat
hour=`echo $timeFormat|awk -F '.' '{print $1}'`
mins=`echo $timeFormat|awk -F '.' '{print $2}'`
minm=`awk 'BEGIN{printf "%.0f\n",0.'$mins'*60}'`
timeRetrunHour=`expr $hour + 8`

###分钟计算
echo "input min:"$3
inputmin=`echo $3|awk -F ':' '{print $2}'`
nowmin=`date |awk '{print $4}'|awk -F ':' '{print $2}'`
echo $nowmin
echo $inputmin
if [ "$nowmin" -gt "$inputmin" ]
then
let hour=$hour-1
fi

timeRetrunTime=$timeRetrunHour:$minm
echo "export TZ=RPC-$timeRetrunTime"
fi
if [ "$2" == 2 ]
then
timeFormat=`awk 'BEGIN{printf "%.2f\n",'$1'/3600}'`
echo $1
echo $timeFormat
hour=`echo $timeFormat|awk -F '.' '{print $1}'`
mins=`echo $timeFormat|awk -F '.' '{print $2}'`
minm=`awk 'BEGIN{printf "%.0f\n",0.'$mins'*60}'`
let timeRetrunHour=$hour-8
echo $timeRetrunHour
###分钟计算
echo "input min:"$3
inputmin=`echo $3|awk -F ':' '{print $2}'`
nowmin=`date |awk '{print $4}'|awk -F ':' '{print $2}'`
echo $nowmin
echo $inputmin
if [ "$nowmin" -gt "$inputmin" ]
then
let hour=$hour-1
fi
timeRetrunTime=$timeRetrunHour:$minm
if [ "$timeRetrunHour" -lt 0 ]
then
echo "export TZ=RPC-${timeRetrunTime#-}"
else
echo "export TZ=RPC+$timeRetrunTime"
fi
fi
}

Sys_data=`date -d "$CURTIME" +%s` #把当前时间转化为Linux时间
In_data=`date -d "$1 $2" +%s`
if [ $In_data -ge $Sys_data ]
then
interval=`expr $In_data - $Sys_data` #计算2个时间的差
timeExport $interval 1 $2
else
interval=`expr $Sys_data - $In_data`
timeExport $interval 2 $2
fi
echo $interval

然后手动执行输出的结果:
export TZ=xxxx