最早碰到时区问题是 发布SPRING BOOT 应用时发现的 发现网关调阅总是提示超时.
按"网上教程",
docker exec -it cloud-app date -R
显示 +0000 时间也差了 8小时 于是 某度 解释有如下几种
1)java 启动参数 加入
-Duser.timezone=GMT+08
2) 在BUILD docker 时 加入
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
或者干脆把 本地的 /etc/localtime COPY 到容器内的等等。发现都不靠谱。于是耐心分析原因.
首先应用 依赖JDK ,本例中应用的是 alpine-openjdk8 找到Dockerfile 发现基于 alpine;
再次找到 alpine:3.9 Dockfile
发现根本没安装 tzdata 于是改造 alpine:39 Dockerfile 内加入
# 设置时区为上海
RUN apk add tzdata&& cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime && echo"Asia/Shanghai" > /etc/timezone
然后根据 OPENJDK 的配置 修改一下依赖为 带时区的版本 。
其它应用 如 mysql/redis/nginx/mongodb等均有同样的问题 注意各镜像有的基于 alipine 有的基于 ubuntu 他们的安装软件命令各不相同
apk|yum|dnf|apt-get|
等等。可以先跑一个测试一下。再选择加入dockerfile