背景
偶然发现程序中的一个定时任务在 Docker
容器中部署后并没有按照既定的时间执行。经过排查后发现,定时任务与实际时间有关联,而容器内(openjdk:8-jdk-alpine)的时间与实际时间相差了8小时,应该是时区问题。
那么,如何解决容器内的时区问题呢?网上有给出各类方式解决这个问题,而且针对了不同的操作系统的镜像都给出了方案。我这里用的是比较简单的 JDK-Alpine
镜像,参考其官方文档后,直接在构建自己的镜像时设置好时区。
设置时区
根据 Alpine
的文档提示:docs.alpinelinux.org/user-handbo…Dockerfile
中:
RUN apk --update add tzdata && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone && \ apk del tzdata && \ rm -rf /var/cache/apk/*
完整Dockfile
FROM openjdk:8-jdk-alpine RUN apk --update add tzdata && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone && \ apk del tzdata && \ rm -rf /var/cache/apk/* VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
Reference
后记
一开始安装启动 minikube
时报错,原因之一是说操作系统的内核版本不支持。。其实,后来我指定了 Kubernetes
的版本就可以了,也就没有用到升级后的内核: minikube start --force --kubernetes-version=v1.23.1
。这里记录下 CentOS7
升级内核版本的操作。
升级前的 CentOS7
升级内核版本信息如下:
# 系统版本信息 [root@k8s1 local]# uname -a Linux k8s1 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux # 内核版本信息 [root@k8s0 ~]# uname -r 3.10.0-1127.el7.x86_64
升级内核版本
[root@k8s1 local]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 获取http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 警告:/var/tmp/rpm-tmp.wEC7Ex: 头V4 DSA/SHA1 Signature, 密钥 ID baadae52: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:elrepo-release-7.0-3.el7.elrepo ################################# [100%] [root@k8s1 local]# yum --enablerepo=elrepo-kernel install -y kernel-lt 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * elrepo: mirrors.tuna.tsinghua.edu.cn * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com elrepo | 3.0 kB 00:00:00 elrepo-kernel | 3.0 kB 00:00:00 (1/2): elrepo/primary_db | 388 kB 00:00:00 (2/2): elrepo-kernel/primary_db | 2.1 MB 00:00:01 正在解决依赖关系 --> 正在检查事务 ---> 软件包 kernel-lt.x86_64.0.5.4.207-1.el7.elrepo 将被 安装 --> 解决依赖关系完成 依赖关系解决 ============================================================================================================================= Package 架构 版本 源 大小 ============================================================================================================================= 正在安装: kernel-lt x86_64 5.4.207-1.el7.elrepo elrepo-kernel 50 M 事务概要 ============================================================================================================================= 安装 1 软件包 总下载量:50 M 安装大小:227 M Downloading packages: 警告:/var/cache/yum/x86_64/7/elrepo-kernel/packages/kernel-lt-5.4.207-1.el7.elrepo.x86_64.rpm: 头V4 DSA/SHA256 Signature, 密钥 ID baadae52: NOKEY0:00 ETA kernel-lt-5.4.207-1.el7.elrepo.x86_64.rpm 的公钥尚未安装 kernel-lt-5.4.207-1.el7.elrepo.x86_64.rpm | 50 MB 00:00:11 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org 检索密钥 导入 GPG key 0xBAADAE52: 用户ID : "elrepo.org (RPM Signing Key for elrepo.org) <secure@elrepo.org>" 指纹 : 96c0 104f 6315 4731 1e0b b1ae 309b c305 baad ae52 软件包 : elrepo-release-7.0-3.el7.elrepo.noarch (installed) 来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org Running transaction check Running transaction test Transaction test succeeded Running transaction 警告:RPM 数据库已被非 yum 程序修改。 正在安装 : kernel-lt-5.4.207-1.el7.elrepo.x86_64 1/1 验证中 : kernel-lt-5.4.207-1.el7.elrepo.x86_64 1/1 已安装: kernel-lt.x86_64 0:5.4.207-1.el7.elrepo 完毕!
设置默认内核
先查看内核默认启动顺序,然后设置默认内核。
# 查看内核默认启动顺序 [root@k8s1 local]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg CentOS Linux (5.4.207-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core) CentOS Linux (0-rescue-37761db4ce554629afd046b89323275e) 7 (Core) # 默认启动的顺序是从0开始,新内核是从头插入(而5.4.207的位置是在0),所以需要选择0 [root@k8s1 local]# grub2-set-default 0
验证内核版本
Note:需要reboot重启生效。
# 重启前 [root@k8s1 local]# uname -r 3.10.0-1127.el7.x86_64 # 需要reboot重启生效 [root@k8s1 local]# reboot # 重启后 [root@k8s1 ~]# uname -r 5.4.207-1.el7.elrepo.x86_64
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!