一、缘由:
Docker Hub中的镜像默认都是0时区,而我们在东八区,差8小时,会导致我们看日志不能准确定位时间,这是很要命的。
二、解决办法:
1、环境变量方式:
docker run 启动时加入环境变量:
docker run -e "TZ=Asia/Shanghai"
docker-compose 方式启动时,加入
environment: - TZ=Asia/Shanghai
2、重新制作镜像方式:
如果你是基于某个官方Image来制作自己的镜像,比如Alpine。那么你可以在Dockerfile中,加入:
RUN apk --no-cache add tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
三、注意事项
1、其他办法:
Dockerfile中加入时区
ENV TZ=Asia/Shanghai
,有可能不会改变系统时区,具体看镜像操作系统。K8s的deployment等yaml中加入env环境变量可以作用于容器运行时,可以改变系统时区,相当于
docker run -e
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx
ports:
- containerPort: 80
env:
- name: TZ
value: "Asia/Shanghai"
2、特殊镜像alpine
使用 alpine
镜像时,直接设置 TZ
环境变量通常不会生效。这是因为 alpine
镜像默认不包含时区数据库(tzdata
),并且其 glibc 也不支持使用 TZ
环境变量进行时区设置。为了在 alpine
镜像中设置时区,可以采取以下方法:
FROM alpine:3.13
# 安装 tzdata
RUN apk add --no-cache tzdata
# 设置时区环境变量
ENV TZ=Asia/Shanghai
# 验证时区设置
RUN date
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com