前言
在使用tomcat官方docker 镜像时,程序在与微信通信过程中返回了时间差问题,查看后发现是docker 容器的问题。
问题
docker 官方镜像使用的都是UTC 标准时间,这就导致了比beijing时间晚8小时。
解决这一问题并不难,只要修正容器的时区就可以了。众所周知,对容器的修改并不会影响到镜像,所以又会出现这样一个问题,再次从镜像启动容器时,时间就会又变成UTC 标准时间。对于此问题,自然是可以使用docker commit 来解决,但我并不想这样做……
解决方案
基于centos 的镜像,系统时区是由/etc/localtime 控制
基于debian 的镜像,系统时区由/etc/timezone 控制
可将系统内的/usr/share/zoneinfo/Asia/Shanghai 文件直接复制到以上位置修改时区
但在基于centos 镜像内,只修改/etc/localtime ,tomcat 取的仍然是UTC 时区,可配置catalina 启动文件的JAVA_OPTS参数,修正tomcat的时区
JAVA_OPTS="-Duser.timezone=GMT+08"
还有一种方式,就是同时设置/etc/timezone文件
docker build -t morrowind/centos .
Dockerfile
#Version: Centos 7.2 CST FROM centos:latest MAINTAINER Morro Wind "[email protected]" RUN yum -y -q upgrade #update system timezone RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #update application timezone RUN echo "Asia/Shanghai" >> /etc/timezone
通过Dockerfile 构建镜像时需要注意,对时区的修改一定要放在yum upgrade后面,否则upgrade 后,会修改时区为UTC
后面就可以基于此基础镜像,构建应用镜像了
时间: 2024-11-29 08:28:54