Docker容器与宿主主机时差8小时,导致定时任务延迟执行

406 阅读1分钟

问题

定时任务相关的一个数据一直不准确,设定的是每天0点执行。后来发现是docker容器内有时差,导致任务延迟执行

image.png

CST应该是指(China Shanghai Time,东八区时间) UTC应该是指(Coordinated Universal Time,标准时间) 所以,这2个时间实际上应该相差8个小时。

方案一 dockerfile 问题解决

FROM openjdk:8u201-jdk-alpine

ENV LANG zh_CN.UTF-8 ENV LC_ALL zh_CN.utf8

ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/TZ /etc/localtime && echo 'TZ' > /etc/timezone

RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

CMD ["sh","-c","/data/startServer.sh"]

修改dockerfile时区 重新构建jdk的镜像

并重新生成容器启动

方案二 问题解决

在容器中创建文件夹

mkdir -p /usr/share/zoneinfo/Asia

Ctrl+D 退出容器 执行下面命令

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/usr/share/zoneinfo/Asia

再进入容器

docker exec -it 容器id /bin/sh

执行命令

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime