Docker容器里面的时间跟宿主机对不上

Docker基本上都采用 UTC 时间,默认时区为零时区。

在 Linux 系统中,控制时区和时间的主要是两个地方:

/etc/timezone 主要代表当前时区设置,一般链接指向/usr/share/zoneinfo目录下的具体时区。
/etc/localtime 主要代表当前时区设置下的本地时间。

docker时区修改方案

1.当宿主机为 Linux 系统时,我们可以直接将宿主机上的/etc/timezone和/etc/localtime挂载到容器中,这样可以保持容器和宿主机时区和时间一致。

 -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro

示例:
docker run -d -p8081:80  -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro  --rm --name web01 centos_nginx:v1

2.通过传递环境变量改变容器时区
适用于基于 Debian 基础镜像, CentOS 基础镜像 制作的 Docker 镜像
不适用于基于 Alpine 基础镜像, Ubuntu 基础镜像 制作的 Docker 镜像
对于基于 Debian 基础镜像,CentOS 基础镜像制作的 Docker 镜像,在运行 Docker 容器时,传递环境变量-e TZ=Asia/Shanghai进去,能修改 docker 容器时区。

-e TZ=Asia/Shanghai

示例:
docker run -d -p8081:80 -e TZ=Asia/Shanghai --rm --name web01 centos_nginx:v1


3.制作 Docker 镜像时调整时区

ENV TZ Asia/Shanghai

RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone

  

  

posted @ 2022-09-19 21:18  lucky_tomato  阅读(1915)  评论(0编辑  收藏  举报