使用openjdk:8-jdk-alpine 镜像部署java应用时会出现时区不一致的问题。

自己封装一个镜像,解决时区问题,并供之后使用。

拉取 openjdk:8-jdk-alpine 镜像

[root@VM-0-9-centos ~]# docker pull openjdk:8-jdk-alpine

运行并进入容器

[root@VM-0-9-centos ~]# docker run -itd --name openjdk8-win openjdk:8-jdk-alpine
[root@VM-0-9-centos ~]# docker exec -it openjdk8-tz sh

增加安装 tzdata 包。

Time Zone Database,简称tz或tzinfo,是一组表示地球上各地的时间历史的代码和数据,目前由IANA维护。

IANA会根据各地政体的变化而定期更新关于时区边界、UTC和夏令时等的规则。

而tzdata是Time Zone Database发布的组件之一,其他还有tzcode等。

tzdata软件包,全称time zone and daylight-saving time(DST) data,供各个Linux系统安装以读取Time Zone Database中数据。

/ # apk update
/ # apk add tzdata

修改时间

/ # cd /usr/share/zoneinfo/
/usr/share/zoneinfo # ls
Africa        Atlantic      Canada        EST5EDT       Factory       GMT-0         Iceland       Japan         MST7MDT       PRC           ROC           US            Zulu          zone1970.tab
America       Australia     Chile         Egypt         GB            GMT0          Indian        Kwajalein     Mexico        PST8PDT       ROK           UTC           iso3166.tab
Antarctica    Brazil        Cuba          Eire          GB-Eire       Greenwich     Iran          Libya         NZ            Pacific       Singapore     Universal     posixrules
Arctic        CET           EET           Etc           GMT           HST           Israel        MET           NZ-CHAT       Poland        Turkey        W-SU          right
Asia          CST6CDT       EST           Europe        GMT+0         Hongkong      Jamaica       MST           Navajo        Portugal      UCT           WET           zone.tab
/usr/share/zoneinfo # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/usr/share/zoneinfo # date
Sun Oct 18 18:57:14 CST 2020

这里系统时间虽然修改过来了,但是之后运行Java程序时,时间任然相差8小时,所以需要添加如下

修改Java时区

/usr/share/zoneinfo # echo Asia/Shanghai > /etc/timezone

删除安装包

/usr/share/zoneinfo # apk del tzdata
(1/1) Purging tzdata (2020a-r0)
Executing busybox-1.29.3-r10.trigger
OK: 103 MiB in 54 packages
sh: getcwd: No such file or directory
/var/cache/apk # rm -rf /tmp/* /var/cache/apk/*

封装镜像

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

[root@VM-0-9-centos ~]# docker commit -a "author name" ade26f97bede openjdk8-tz:latest

 

 

上传到harbor

登录harbor

[root@VM-0-10-centos /]# docker login 172.16.0.33:808
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

修改镜像名称,改成能上传到harbor的名称,格式为: HarborIP/项目名/image名字:版本号

docker tag openjdk8-tz:latest 172.16.0.33:808/library/openjdk8:latest

将镜像push到harbor

docker push 172.16.0.33:808/library/openjdk8:latest

从harbor获取镜像

docker pull 172.16.0.33:808/library/openjdk8

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐