Docker容器部署时区问题的坑

这两天公司项目部署阿里云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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值