学而实习之 不亦乐乎

Docker 中的 SpringBoot 项目输出的日志时间不准确

2024-03-02 19:28:30

一、问题

Docker 中部署的 SpringBoot 项目产生的日志与当前实际时间相差8小时,查看日志时感觉很怪异,需要倒换时间。

可以断定是时区问题导致的,虽然服务器上的时间是正常的,但系统实际的运行环境是在 docker 中,因此确定是 docker 中的时区导致问题。

二、解决方法

以下解决办法可以试试

1、通过传递环境变量改变容器时区

-e TZ=Asia/Shanghai

$ docker run -e TZ=Asia/Shanghai  

2、在Dockerfile中设置镜像时区

因为Ubuntu 基础镜像中没有安装了 tzdata 包,因此我们需要先安装 tzdata 包。

FROM xxx:xxxx

ENV TZ=Asia/Shanghai \
    DEBIAN_FRONTEND=noninteractive

RUN apt update \
    && apt install -y tzdata \
    && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone \
    && dpkg-reconfigure --frontend noninteractive tzdata \
    && rm -rf /var/lib/apt/lists/*

3、将宿主机与容器的时间进行挂载

-v /etc/localtime:/etc/localtime

4、进容器内部设置

进入容器

$ docker exec -it 容器名 /bin/bash 

设置时区

$ rm /etc/localtime
$ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime