您现在的位置是:首页 >技术交流 >Docker时区问题网站首页技术交流

Docker时区问题

椰汁菠萝 2024-06-14 17:19:07
简介Docker时区问题

在这里插入图片描述

背景

当前docker容器技术应用越来越广泛,但在启动容器后,容器内部的时间并不是东八区

Docker的基础镜像设置大多是UTC,也就是标准的UTC 时间,所以要简单的调整一下,变成中国标准时间CST(China Standard Time = UTC+8:00)

一.在构建镜像时修改时区

在构建镜像时修改时区就没有必要在容器运行时进行修改了,比较简单。

1.1 基于Debian的镜像

直接添加环境变量即可,大部分docker镜像都是基于Debian

#dockerfile
ENV TZ=Asia/Shanghai

1.2 基于Alpine的镜像

与 Debian 镜像不同,此类镜像中并没有包含tzdata,所以只设置环境变量并不能达到我们想要的效果,因此需要安装tzdata

#dockerfile
ENV TZ=Asia/Shanghai
RUN apk update 
    && apk add tzdata 
    && echo "${TZ}" > /etc/timezone 
    && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime 
    && rm /var/cache/apk/*

1.3 基于ubuntu的镜像

与 Debian 镜像不同,此类镜像中并没有包含tzdata,所以只设置环境变量并不能达到我们想要的效果,因此需要安装tzdata

ENV TZ=Asia/Shanghai 
RUN echo "${TZ}" > /etc/timezone  
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime  
&& apt update  
&& apt install -y tzdata  
&& rm -rf /var/lib/apt/lists/*

二.在启动容器时修改时区

仅对Debian有效,使用前请先查看镜像支持的环境变量

docker run -e TZ=Asia/Shanghai .........   

三. k8s中修改时区

和上面方法一样,配置环境变量

apiVersion: apps/v1
kind: Deployment
spec:
  replicas: 1
  selector:
    matchLabels: 
      app: test
  template:
    metadata:
      labels: 
        app: test
    spec:  
      imagePullSecrets:
        - name: test     
      containers:
      - name: test
        image: ${HARBOR}/${HARBOR_LIB}/${APP_NAME}:${APP_TAG}
        imagePullPolicy: Always
        ports:
        - name: tcp-8080
          protocol: TCP
          containerPort: 8080
        env:
        - name: "TZ"    
          value: "Asia/Shanghai"

如果镜像不是基于Debian构建或者没有安装tzdata,建议安装后重新打镜像,或者自己进入容器调整好后,重新打成镜像,后续使用新做的镜像即可

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。