docker 构建基础镜像 时区问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 构建基础镜像 时区问题相关的知识,希望对你有一定的参考价值。

前言


在使用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


后面就可以基于此基础镜像,构建应用镜像了

本文出自 “morrowind” 博客,请务必保留此出处http://morrowind.blog.51cto.com/1181631/1792732

以上是关于docker 构建基础镜像 时区问题的主要内容,如果未能解决你的问题,请参考以下文章

docker 下 alpine 镜像设置时区的有效办法

docker容器时间与宿主机时间不一致问题总结

Docker 镜像时区设置

Docker alpine 添加cst时区并发布镜像到docker.io

Docker 时区调整方案

Docker 修改容器内的时区