配置 Docker 容器系统时区

Configure TimeZone in Docker Container

Posted by zihengCat on 2019-01-06

前言

默认情况下,我们通过Dockerfile构建出容器镜像,使用 Docker 镜像(Image)启动 Docker 容器,容器内部 Linux 系统使用的时间为世界标准时间(UTC),而非宿主机系统的时区时间。有时候,这一情况会对容器的运行造成不便。

问题分析

出现这种情况的原因:容器内部操作系统并未指定时区(TimeZone)信息,系统默认使用世界标准时(UTC+0)。

配置 Docker 容器系统时区(TimeZone)

了解到问题原因后,可采用如下配置方式,将Docker容器系统时区配置正确。

我们可以在编写Dockerfile时,显式的为镜像加入时区(TimeZone)信息。

...
RUN ...
    cp "/usr/share/zoneinfo/Asia/Shanghai" "/etc/localtime" && \
    echo "Asia/Shanghai" > "/etc/timezone" && \
    ...
...

代码清单:Dockerfile构建镜像时配置时区

如果镜像默认没有写入时区(TimeZone)信息,我们也可以在启动容器时,通过挂载宿主机时区文件或者添加时区系统环境变量以达到配置Docker容器系统时区的目的。

$ docker run -d \
             -v /etc/localtime:/etc/localtime:ro \
...

代码清单:Docker容器启动时配置时区 - 挂载宿主机时区文件

$ docker run -d \
             -e "TZ=Asia/Shanghai" \
...

代码清单:Docker容器启动时配置时区 - 添加时区系统环境变量

参考资料