Docker修改容器中的时间
前⾔
在公司开发时使⽤ Docker 创建数据库(SQL Server)的实例⼗分⽅便,还原数据库也只要设置好共享⽂件夹,在 SQL Server Management Studio 的图形化界⾯中选择数据库的备份⽂件即可还原。但在处理与时间有关的业务逻辑时发现有问题,查询后发现docker容器中的时间使⽤的是“标准时间”,与“北京时间”相差8⼩时,因此解决⼀下问题(顺便复习⼀下 Linux 的⼀些命令 #滑稽)。
本⼈使⽤的是 Windows 10 专业版系统,Docker(之前发现 Docker Toolbox 会有⼀些问题,⽐如还原数据库出错)。
1. 创建容器
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YOUR_PASSWORD>" `
-p <YOUR_PORT>:1433 --name <YOUR_NAME> -v <HOST_SHARE_DIR>:<DOCKER_SHARE_DIR> -d microsoft/mssql-server-linux
注意点:
1. 要运⾏ SQL Server 的 Docker 镜像,主机运⾏内存不能少于2G
2. 对于 SQL Server 的 Docker 镜像,密码不能设置的太简单,否则容器运⾏后会直接报错退出。建议字母、数字、特殊符号,且不少于
8位
3. 使⽤ -p 设置端⼝号时,不要与主机已有冲突(这个应该都知道XD)
4. 使⽤ -v 设置共享⽬录时,即使⽬录不存在也没关系,Docker会⾃动新建(主机的和容器的都会新建)
5. 使⽤ Powershell 时,如果命令⼀⾏太长,可以使⽤ ` 换⾏
2. 查看时间
⾸先进⼊容器
docker exec -it <YOUR_CONTAINER_NAME> /bin/bash
使⽤ date 命令查看时间
root@de3281e271c0:/# date
Sat Apr 11 08:21:26 UTC 2020
⽽我们主机此时的时间为(使⽤Powershell查看):
PS C:\Users\XXX> GET-DATE
2020年4⽉11⽇, 星期六 16:26:10
可以看到相差8个⼩时
⽽⼿动设置时区也不⾏(正常的话应该会出现选择时区):
root@de3281e271c0:/# tzselect
/usr/bin/tzselect: line 180: /usr/share/zoneinfo/iso3166.tab: No such file or directory
/usr/bin/tzselect: time zone files are not set up correctly
3. 解决
我们此时要做的就是从另⼀台电脑上拷贝时区⽂件,放⼊Docker容器中,并将设置软链接起来。
此处我使⽤ WinSCP 从云服务器中拷贝⽂件(云服务器中的系统为 CentOS,⽽ SQL Server 容器中的系统为 Ubuntu,但可以通⽤)
先查看⼀下\
[root@VM_0_2_centos ~]# file /usr/share/zoneinfo/Asia/Shanghai
/usr/share/zoneinfo/Asia/Shanghai: timezone data, version 2, 2 gmt time flags, 2 std time flags, no leap seconds, 16 transition
times, 2 abbreviation chars
为了⽅便我拷贝到了主机的d盘根⽬录下。由于容器中甚⾄没有 /usr/share/zoneinfo/Asia/ ⽂件夹,需要先新建,再复制进去
新建⽂件夹(在容器的 shell中):
mkdir -p /usr/share/zoneinfo/Asia
复制(在主机的 Powershell中):
docker cp d:\Shanghai <YOUR_COINTAINER_NAME>:/usr/share/zoneinfo/Asia/Shanghai
最后建⽴软链接:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看效果
root@de3281e271c0:/# date
Sat Apr 11 16:57:18 CST 2020
结束!
吐槽
新版本的 Docker Desktop 中加⼊了 Dashboard 功能,可以图形化的管理已有的容器(开启、关闭、⽇志),但其命令⾏操作实在不给⼒,按 Tab 键⽆法⾃动补全,因此还是建议使⽤ exec -it 的⽅式执⾏。
后记powershell创建目录
本⽂新使⽤了 > 符号来表⽰ shell 输出的内容,可能较原来清晰⼀些。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论