在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 Docker Hub 有大量基于 alpine 的镜像。
但是所有基于 alpine 的镜像使用的都是默认时区,因此在使用时,要对时区进行修改。
时区地图
https://www.timeanddate.com/time/map/
查看日期
首先可以进入 alpine 的镜像(默认 /bin/sh
)查看日期:
修改日期
参考:https://wiki.alpinelinux.org/wiki/Setting_the_timezone
先在容器按照上述参考文档,修改查看是否有效。
实验
在前面进入的容器中,按顺序执行下面的命令:
通过实验发现该方法可行,下面针对镜像(而不是镜像实例)进行修改。
修改
保存为 Dockerfile 文件,在 Dockerfile 目录执行命令构建镜像:
通过上述方式创建后的镜像仍然很少,而且是符合需要的时区。
基于 alpine 的其他镜像的修改
例如 openjdk:8u191-jre-alpine3.9
是一个基于 alpine 的镜像。
openjdk:8u191-jre-alpine3.9 Dockerfile 地址:
https://github.com/docker-library/openjdk/tree/d93be18f4f2d5e8457169cac00e559d953b6028e/8/jre/alpine
在 openjdk:8u191-jre-alpine3.9
镜像中的时区也存在问题。
修改方式一
下载上面提供的 Dockerfile,稍作修改即可实现时区的定制:
修改方式二
或者参考前面 alpine 的修改:
所有基于 alpine
的镜像都可以采用类似的方法进行修改。
其他系统
例如 Docker 官方提供的 mysql
可以先进系统看时区,以及是否存在时区的配置文件,存在的情况下,直接修改即可。示例如下: