Docker时区问题,看这一篇就够了

8507a90f43cd570bbf864754f2c56806.png

Docker时区问题通常是由于时区设置不正确导致的。当Docker容器启动时,它会继承宿主机的时区设置。如果宿主机的时区设置不正确,那么容器内的时间也会不正确。解决这个问题的方法通常如下面几种:

  1. 在Dockerfile中设置时区环境变量。

    可以在Dockerfile中添加以下代码:ENV TZ=Asia/Shanghai。这样,在构建Docker镜像的时候,容器的时区就会被设置为上海时区。

  2. 通过docker-compose中的配置来决定时区。注意字典和复制形式容易混合而出错。

  3. 在启动Docker容器的时候指定时区参数。

  4. 也可以用复制文件的方式解决时区问题。命令如下:

    docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime

8f15915858e57834485ed1eaa6a2ae03.png

下面详细讲一下不同版本的时区设置方式。

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"
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值