Docker容器部署时区问题的坑

为什么80%的码农都做不了架构师?>>>   hot3.png

这两天公司项目部署阿里云k8s器生产环境,底包用的是java:8,Dockerfile文件为:

FROM java:8
VOLUME /var/xxx/xxx-point-log/
COPY app.jar /var/xxx/xxx-point/app.jar
ENV RUN_LIB="/var/xxx/xxx-point/app.jar"

ENV JAVA_OPTS=" -server -Xmx2048m -Xms1500m -Xmn1024m  -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "

RUN sh -c 'touch $RUN_LIB' 
ENTRYPOINT [ "sh", "-c", "nohup java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar $RUN_LIB >/var/xxx/xxx-point-log/xxx-point-log.log 2>&1" ]

联调发现接口输出的时间戳总是比数据库中保存的时间多了8个小时,阿里云的sit和uat环境均没有问题,对比两边环境的时间配置也没发现问题,一时很疑惑。 突然想起来,sit和uat都是用虚机环境,只有生产是docker,结果进docker一看,果然时区不对。网上也很多相关的文章,处理方式也很简单,Dockerfile调整为如下:

FROM java:8
VOLUME /var/xxx/xxx-point-log/
COPY app.jar /var/xxx/xxx-point/app.jar
ENV RUN_LIB="/var/xxx/xxx-point/app.jar"

ENV JAVA_OPTS=" -server -Xmx2048m -Xms1500m -Xmn1024m  -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "

RUN sh -c 'touch $RUN_LIB' \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT [ "sh", "-c", "nohup java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar $RUN_LIB >/var/xxx/xxx-point-log/xxx-point-log.log 2>&1" ]

解决问题,恢复正常。

该问题记录一下。其实应该很快能发现问题的,然而一开始考虑方向是从在应用层面加入时区设置,结果未成功,浪费了时间。先看看环境上面的问题。

转载于:https://my.oschina.net/tree/blog/1632016

你可能感兴趣的:(运维,java,javascript,ViewUI)