前言
今天遇到docker容器内 java 应用程序时间和 mysql 数据时间不对的问题,记录下问题处理的方法,后续备用。
一、确认宿主的时间是否准确
1、主机时区
# 查看主机时区
timedatectl
# 设置主机时区(上海时间)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2、主机时区
# 查看主机时间
date
# 设置主机时间
date -s 10:00:00
hwclock -w
二、容器时区与宿主机同步
1、Docker 容器设置时区
# 进入容器设置
docker exec -it container_id /bin/bash
# 修改时区,设置为上海时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2、和宿主同步方法
# 1.在 run 容器时添加参数挂载宿主时间配置:
-v /etc/localtime:/etc/localtime
# 2.复制宿主 localtime 时间配置覆盖:
docker cp /etc/localtime container_id:/etc/localtime
3、Docker 设置 build 参数
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
三、java 应用时区设置
# 在启动jar包添加时区参数:
-Duser.timezone=GMT+08
四、mysql 应用时区设置
1、通过命令修改
# 修改mysql全局时区为北京时间,即我们所在的东8区
set global time_zone = '+8:00';
# 修改当前会话时区
set time_zone = '+8:00';
# 立即生效
flush privileges;
2、通过修改my.cnf配置文件来修改时区
# vim /etc/my.cnf ##在[mysqld]区域中加上
default-time_zone = '+8:00'
# 重启mysql使新时区生效
# /etc/init.d/mysqld restart
最后修改:2020-01-10 09:03:42
© 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

发表评论