容器化 sql server 时间修改

docker sqlserver时间修改

问题背景

为了方便直接使用官方sqlserver镜像启动的数据库,出现了时间不对的问题,中午吃饭午休的时间对问题进行对问题的一顿分析并进行了相关搜索

解决方法1

#删除容器重新指定变量启动
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -e 'TZ=Asia/Shanghai'\
   -d mcr.microsoft.com/mssql/server:2017-latest 

解决方法2

#进入容器
docker exec -it  sqlserver bash
#修改时间
apt update                    #为了安装tzdata
apt install tzdata            #为了获取/usr/share/zoneinfo
rm /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date                          #显示为当前时区时间

#注:有些应用从TZ中获取时区,所以还要加上 ENV 
TZ="Asia/Shanghai"
#tzselect 命令找到正确的时区值
tzselect
#如果选择中国上海  分别输入 4 9 1 1
root@0fd41ac5858e:/# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
 1) Africa
 2) Americas
 3) Antarctica
 4) Asia
 5) Atlantic Ocean
 6) Australia
 7) Europe
 8) Indian Ocean
 9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#? 4
Please select a country whose clocks agree with yours.
 1) Afghanistan		  18) Israel		    35) Palestine
 2) Armenia		  19) Japan		    36) Philippines
 3) Azerbaijan		  20) Jordan		    37) Qatar
 4) Bahrain		  21) Kazakhstan	    38) Russia
 5) Bangladesh		  22) Korea (North)	    39) Saudi Arabia
 6) Bhutan		  23) Korea (South)	    40) Singapore
 7) Brunei		  24) Kuwait		    41) Sri Lanka
 8) Cambodia		  25) Kyrgyzstan	    42) Syria
 9) China		  26) Laos		    43) Taiwan
10) Cyprus		  27) Lebanon		    44) Tajikistan
11) East Timor		  28) Macau		    45) Thailand
12) Georgia		  29) Malaysia		    46) Turkmenistan
13) Hong Kong		  30) Mongolia		    47) United Arab Emirates
14) India		  31) Myanmar (Burma)	    48) Uzbekistan
15) Indonesia		  32) Nepal		    49) Vietnam
16) Iran		  33) Oman		    50) Yemen
17) Iraq		  34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

	China
	Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now:	Fri Aug 21 14:35:26 CST 2020.
Universal Time is now:	Fri Aug 21 06:35:26 UTC 2020.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
	TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
#最后重启容器 在重新检查日志时间 
docker restart sqlserver
docker logs -f sqlserver
#重新检查sqlserver时间
select SysDateTime() 

补充

Linux 修改本机时区

echo 'Asia/Shanghai' >/etc/timezone

参考文档

官方操作手册
ubuntu16.04 docker 时区设置问题
docker ubuntu16.04 设置时区
SQL Server 的本地时间和UTC时间
/etc/localtime和/etc/timezone区别

posted @ 2020-08-21 14:44  鸣昊  阅读(1181)  评论(0编辑  收藏  举报