Docker修改容器中的时间
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
注意点:
- 要运行 SQL Server 的 Docker 镜像,主机运行内存不能少于2G
- 对于 SQL Server 的 Docker 镜像,密码不能设置的太简单,否则容器运行后会直接报错退出。建议字母、数字、特殊符号,且不少于8位
- 使用 -p 设置端口号时,不要与主机已有冲突(这个应该都知道XD)
- 使用 -v 设置共享目录时,即使目录不存在也没关系,Docker会自动新建(主机的和容器的都会新建)
- 使用 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 的方式执行。
后记
本文新使用了 > 符号来表示 shell 输出的内容,可能较原来清晰一些。
Docker修改容器中的时间的更多相关文章
- docker修改容器gogs时区时间
问题描述: 公司内部搭建了一个gogs-git,是用docker部署的,但是发现提交的代码什么的时间跟服务器时间不一致 提交上去的世界是UTC时间不是中国的时间CST,相当于慢了8个小时 1.dock ...
- Docker 在容器中部署静态网站
Docker 在容器中部署静态网站 在容器中部署静态网站 设置容器的端口映射 run -P``--publish-all=true|false:容器暴露的所有端口进行映射 -p``--publish= ...
- docker从容器中怎么访问宿主机
docker从容器中怎么访问宿主机 我来答 浏览 3160 次 2个回答 #热议# 2019年全国两会召开,哪些提案和政策值得关注? 好程序员 知道合伙人 推荐于2017-11-22 dock ...
- docker 修改容器env配置
docker 修改容器env配置 场景:修改zabbix数据库密码 zabbix容器构成: 数据库:zabbix-mysql server端:zabbix-server-mysql web端:zabb ...
- 【Docker】-NO.132.Docker.1 -【Docker 修改容器端口】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- Docker:容器与主机时间不同步问题解决
在Docker容器运行后,可能会发现容器时间与宿主机时间不一致,一般会差8个小时.这样会造成在容器中运行的web程序打出的日志时间与实际时间不一致,如果web程序中有定时任务也会造成影响等,需要对宿主 ...
- Docker 修改容器内的时区
利用docker发布服务,发现 程序用获取的系统时间比正常时间晚了8个小时 进入容器 docker exec -it /bin/sh 查询时间 date -R 发现时区为0时区 解决思路 1.复制相应 ...
- docker 修改容器配置文件
启动docker镜像命令docker run 可以指定端口映射,但是容器一旦创建就无法在通过命令修改.通常是保存镜像在创建一个新的容器.有没有办法不保存镜像直接修改这个容器呢?答案是有的,本文已mys ...
- 【Docker】容器中找不到vi命令
在Docker容器中找不到vi命令 解决办法: 1.通过命令获取最新的软件包 apt-get-update 2.安装vi命令 apt-get install vim 安装过程中提示是否进行输入Y即可. ...
随机推荐
- java环境的配置——实现win10下双击直接运行jar文件
java环境的配置--实现win10下双击直接运行jar文件 在渗透测试的过程中很多工具的安装和使用需要java环境,下面我来介绍一下java环境配置的超详细步骤(包含怎样实现win10下双击直接运行 ...
- .net core 响应的json数据驼峰显示问题。
在.net core webapi中,默认响应的json数据是以驼峰显示的,即首字母小写的方式.如果让其正常显示,只需要在全局配置即可.代码如下图: 配置之后,响应数据就不会再以驼峰的形式展示了.而是 ...
- gcc limits.h的bug定位看include_next和默认搜索路径
手编的交叉编译工具链经常报一堆宏未定义,例如下面是编译gtest的时候报_POSIX_PATH_MAX宏未定义,有时还会上报SSIZE_MAX等宏未定义: googletest/src/gtest-f ...
- Abp vNext 基础篇丨领域构建
介绍 我们将通过例⼦介绍和解释⼀些显式规则.在实现领域驱动设计时,应该遵循这些规则并将其应⽤到解决⽅案中. 领域划分 首先我们先对比下Blog.Core和本次重构设计上的偏差,可以看到多了一个博客管理 ...
- luogu P2473 奖励关
奖励关 看到数据范围,想到状压,那问题就是如何设计方程 设\(dp[i][j]\)表示在第\(i\)轮的时候,状态为\(j\)时的最优策略所拿的分值,\(j\)的二进制下为1的位置,表示选了这个宝物, ...
- 题解 matrix
传送门 无比毒瘤的dp题,而且伪装地好像很可做的样子 考场上我给它氪了差不多一个小时最后还是只能扔了个20pts状压走人 以下思路基本均来源于题解: 对于此题,题面中三个限制条件: (1)第 i 行第 ...
- .net core api 对于FromBody的参数验证
前言 在framework的mvc中,经常会使用 Model.State . ModelState.IsValid 配合着特性进行参数验证,通过这种方式可以降低controller的复杂度,使用方便. ...
- 04.SpringMVC之用
分析 Spring MVC 是怎么处理请求的.首先分析 HttpServletBean.FrameworkServlet 和 DispatcherServlet 这三个 Servlet 的处理过程,最 ...
- 一些Java知识点
1 import java.util.ArrayList; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 ...
- Linux从头学09:x86 处理器如何进行-层层的内存保护?
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...