docker时区不正确的问题修改记
前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时。我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的。
mybatis-plus打印的sql脚本中,包含时间参数的,都被强制减掉了8个小时,我一开始还以为是java方面的问题,原来是docker时区没有设置正确。mybytis-plus也是等数据库执行了才把SQL语句打印出来的,问题根源在数据库的微服务中!
看了docker用了什么版本 cat /etc/issue,原来用的是debian 9,不熟悉,加上docker各种命令不安装,非常难弄。
查看时区 date -R,果然不是北京时间。
千辛万苦安装了ntpdate,却提示 Can't adjust the time of day: Operation not permitted,修改时间也没有权限。因为docker也算是虚拟机吧,不能修改。
最后发现用宿主机的时间配置文件复制到容器就好了,真是笨,摸索了一两个小时。。。
docker cp /usr/share/zoneinfo/Asia/Shanghai mysql:/etc/local
mysql时间正确了,但是查询的时候时间还是少了8个小时,这时候我才想到,另外一个微服务的容器里面的时区会不会也是错的?
2019-08-19 00:37:30
熬到半夜了,也不顾头发快掉光了,继续研究,打开神器 wireshark 然后输入tcp.port==3306进行过滤,请求就出来了。尴尬的是我抓包看到的SQL语句就是减少了8个小时的。我好纳闷,连别的mysql服务器没有问题啊,怎么连这个mysql服务器就有问题了呢?虽然我知道就是这台mysql服务器的问题,但我还不明确具体问题出在哪。后来看到wireshark捕获到的一堆请求,我才想到,在我的 Java 服务启动时,spring boot 会去和mysql数据库建立联系,这时候就会获取mysql的时区,所以最根本的问题就是mysql的时区设置了!
虽然mysql容器里面的操作系统时区改了,但是我忘记了修改mysql的时区,所以show variables like '%time_zone%'查询出来是这样的:
Variable_name Value
system_time_zone CST
time_zone SYSTEM
想想自己真是蠢货啊。容器里面改不了,只好在宿主机改了,再复制进去。
[root@localhost ~]# docker cp mysql:/etc/mysql/my.cnf ./my.cnf
[root@localhost ~]# vim my.cnf
[root@localhost ~]# docker cp my.cnf mysql:/etc/mysql/my.cnf
[root@localhost ~]# docker restart mysql

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 # Custom config should go here
!includedir /etc/mysql/conf.d/ default-time-zone = '+8:00'

设置后,重启mysql容器,docker restart mysql,然后查询变量,show variables like '%time_zone%'查询出来是这样的:
Variable_name Value
system_time_zone CST
time_zone +08:00
后来再启动服务一看,终于好了。可以睡觉了,毕竟头发不多了。
docker时区不正确的问题修改记的更多相关文章
- 困扰的问题终于解决了-docker时区不正确的问题修改记
前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时.我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的. mybatis-plus打印 ...
- [转帖]Linux修改时区的正确方法
Linux修改时区的正确方法 /etc/localtime 以及timedatectl 两种方式修改时区. CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后 ...
- Docker搭建tomcat运行环境(修改镜像方式)
对于java程序员来说,要想使用Docker来部署你的应用,那么在镜像中安装类似于tomcat的容器基本上是必须的(sprintboot项目除外),本篇介绍自己基于对centos镜像的修改,创建自己的 ...
- Linux修改时区的正确方法
CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 [root@centos7 ~]# ll /etc/localti ...
- 修改docker时区
在实际业务场景中,经常碰到启动了一个容器,容器的时区是UTC的导致还需要重新运行: 我们在具体处理时也出现了该显现 业务场景: 数据库系统定时备份脚本, 定时备份脚本按照每天备份, 通过k8s启动容器 ...
- centos7下安装docker(3.3创建镜像--修改dockerfile)
1.我们在制作dockerfile的时候可能有些命令无法执行,导致镜像无法创建成功,这时我们可以修改dockerfile,从而达到我们的目的 查看Dockerfile内容 创建新的镜像,失败 Dock ...
- docker运行中的container怎么修改之前run时的env
如题,这样: 1. service docker stop, 2. 修改/var/lib/docker/containers/[container-id]/config.json里对应的环境变量 3. ...
- 直接修改class文件内容即使是文本会导致App异常,正确方式是修改java再用生成的class替换掉原有的class
前几天来了个小任务,把某项目中某人的邮件地址改了下. 由于对项目不熟悉,于是采用find方式找出app中所有包含某人邮件地址的文件都找出来了. xml,properties大约三四个,还有两个clas ...
- Logstash之时区问题的建议和修改---filter---and duplicate resolution.
2. logstash es duplicate https://logstash.jira.com/browse/LOGSTASH-1875 https://logstash.jira.com/br ...
随机推荐
- nginx web服务器概念了解 配置
服务器 服务器 服务器是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性. 互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能 ...
- android studio gradle的坑
国产模拟器别国外的好用.非常傻瓜.有人推荐夜神. 之前用geom,下载Android都得半天. 每次做开发前,配置环境都要搞半天.尤其是想快速学习一个技术的话,光装环境都让人放弃了.最近想看一 ...
- 关于 charset 的几种编码方式
经常遇到charset=gb2312.charset=iso-8859-1.charset=utf-8这几种编码方式,它们有什么不同,看下面的图 编码方式 含义 charset=iso-8859-1 ...
- 接口&&多态&&构造函数&&关键字
day06 抽象类的局限性(与接口的区别) 抽象类可以定义非抽象方法,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;jdk1.8之后接口可以包含默认方法. 一个类只能继承一个直接父类 ...
- 洛谷 P2212 【[USACO14MAR]Watering the Fields S】
一道最小生成树模板题,这里用的Kruskal算法,把每两点就加一条边,跑一遍最小生成树即可. #include <bits/stdc++.h> using namespace std; s ...
- 简单案例:form表单应用向后端发数据
效果如下图: 先新建一Django项目. 最后在terminal执行python manage.py runserver 8090 运行djago程序 浏览器输入http://127.0.0.1:80 ...
- 2.在linux安装ssh_免密连接
Linux开启ssh服务 首先更新源 sudo apt-get update 安装ssh服务 sudo apt-get install openssh-server 检测是否已启动 ps -e | g ...
- Numerical Sequence (Hard vision) 题解
The only difference between the easy and the hard versions is the maximum value of \(k\). You are gi ...
- Mac搭建svn服务器环境
Mac搭建svn服务器环境 svn是Subversion的简称,是一个开放源代码的版本控制系统, Mac系统自带了svn的服务端和客户端功能, 因此不需要下载第三方软件,就可以支持svn进行版本的管控 ...
- Redux的理解与使用
一.什么是Redux? Redux是一个第三方状态管理的js库,它不仅仅可以适用于react框架,还可以用于其他的vue,auglar等框架.只不过react的生态中不包括一个状态管理的库而已,所以与 ...