docker容器的时区问题和中文问题

为什么定时任务没执行? 为什么, 数据的插入时间是这个?

不知你们是不是在开发过程中, 有过如上的那些疑问. 有时真是百思不得其解, 将程序放到自己机器上运行好好的, 但一放到开发环境或测试环境, 就出现这种让人恼火的问题. 此时, 你或许看一关注下, 多个系统的时间是否一致, 是否都是东八区.

言归正传, 这里我要说的是docker容器化之后, 各个容器的时区设置和中文支持.

另外, 我还有一个不解的地方, 就是docker镜像的时间是不能修改的吗? 那我有这种测试场景时, 怎么解决? 换回虚拟机吗? 那我费这么大工夫搭建docker环境干嘛? 期望知道的大神, 能帮我解答下这个疑问.

情景一: 自己基于centos7, 扩展镜像.(解决了时区问题和中文支持问题)

Dockerfile

# 基础系统镜像
FROM daocloud.io/library/centos:7.2.1511
MAINTAINER pan 
LABEL Description="这是一个基础的系统镜像,基于CentOS 7,设置更新源,解决中文问题,并安装git(org.pzy/base-centos7:1.0)"  Version="1.0"
RUN rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区
# 使用国内更新源,代替原始的更新源(大天朝的无奈)
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
ADD CentOS7-Base-163.repo /etc/yum.repos.d/
RUN yum clean all && yum makecache && \
    yum -y install kde-l10n-Chinese && \
    yum -y install glibc-common && \
    yum clean all && \
    localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 #设置中文环境
ENV LC_ALL "zh_CN.UTF-8"

情景二: 做一个基于oracle jdk8的镜像(解决了时区问题和中文支持问题)

Dockerfile

FROM daocloud.io/library/centos:7.2.1511
MAINTAINER pan 
LABEL Description="基于CentOS 7,安装了jre 8(org.pzy/oracle_jre8:1.0)"  Version="1.0"
RUN rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
ADD CentOS7-Base-163.repo /etc/yum.repos.d/
RUN yum clean all && yum makecache && \
    yum -y install kde-l10n-Chinese && \
    yum -y install glibc-common && \
    yum clean all && \
    localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 #设置中文环境
ENV LC_ALL "zh_CN.UTF-8"
ADD server-jre-8u162-linux-x64.tar.gz  /usr/lib/jvm/
RUN echo "export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162" >> /etc/profile && \
    echo "export JRE_HOME=/usr/lib/jvm/jdk1.8.0_162/jre" >> /etc/profile && \
    source /etc/profile
ENV JAVA_HOME /usr/lib/jvm/jdk1.8.0_162
ENV JRE_HOME /usr/lib/jvm/jdk1.8.0_162/jre
ENV PATH $PATH:$JAVA_HOME/bin:$JRE_HOME/bin

情景三: 做一个tomcat8的镜像(解决了时区问题和中文支持问题)
Dockerfile

From org.pzy/oracle_jre8:1.0
MAINTAINER pan 
LABEL Description="基于CentOS 7,安装了jre 8和tomcat8.5(org.pzy/oracle-jre8-tomcat85:1.0)"  Version="1.0"
ADD apache-tomcat-8.5.28.tar.gz  /usr/lib/tomcat/
RUN echo "export CATALINA_HOME=/usr/lib/tomcat/apache-tomcat-8.5.28" >> /etc/profile && \
    echo "export CATALINA_BASE=$CATALINA_HOME" >> /etc/profile && \
    echo "export CATALINA_TMPDIR=$CATALINA_HOME/tmp" >> /etc/profile && \
    source /etc/profile
ENV CATALINA_HOME /usr/lib/tomcat/apache-tomcat-8.5.28
ENV CATALINA_BASE $CATALINA_HOME
ENV PATH $PATH:$CATALINA_HOME/bin
EXPOSE 8080
CMD ["catalina.sh","run"]

情景四: 基于mysql的官方镜像,设置时区(只解决了时区问题)
当然, 你可以完全基于centos镜像, 再做一个mysql的镜像, 但是, 比较麻烦, 还有一个问题就是,做出的镜像有1.4g左右, 所以放弃了. 而我也只是要时间一致就ok. 所以就在官方基础上修改了.
Dockerfile

FROM mysql:5.7

MAINTAINER pan 
LABEL Description="基于mysql:5.7做成的org.pzy/mysql-cn:5.7"  Version="1.0"

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

情景五: 基于gogs的官方镜像,设置时区(只解决了时区问题)

FROM gogs/gogs:0.11.34

MAINTAINER pan 
LABEL Description="基于gogs/gogs:0.11.34做成的org.pzy/gogs-cn:1.0"  Version="1.0"

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

情景六: 基于jenkins的官方镜像,设置时区. (这里,有点不同, 是设置的jdk的时区,并未改变系统的时区, 为什么不改系统时区呢?因为没权限, 研究了一阵, 没弄出来, 所以只能将就着用了)(只解决了时区问题)
Dockerfile

FROM jenkins:2.60.3

MAINTAINER pan 
LABEL Description="基于jenkins做成的org.pzy/jenkins-cn:1.0"  Version="1.0"

# 这里解决jdk的时区问题(因为系统的时区不是东八区,但又不知道怎么修改这个镜像的时区,所以只能修改jdk的时区)
ENV JAVA_OPTS -Duser.timezone=Asia/Shanghai

你可能感兴趣的:(docker容器的时区问题和中文问题)