Docker时区问题

发布时间 2023-09-06 07:11:20作者: GaoYanbing

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

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

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

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

#dockerfile
ENV TZ=Asia/Shanghai
1
2
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
2
3
4
5
6
7
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/*
1
2
3
4
5
6
二.在启动容器时修改时区
仅对Debian有效,使用前请先查看镜像支持的环境变量

docker run -e TZ=Asia/Shanghai .........
1
三. 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"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
如果镜像不是基于Debian构建或者没有安装tzdata,建议安装后重新打镜像,或者自己进入容器调整好后,重新打成镜像,后续使用新做的镜像即可
————————————————
版权声明:本文为CSDN博主「椰汁菠萝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/suo082407128/article/details/130606159