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

浙公网安备 33010602011771号