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