Anguiao

在 Docker 中设置时区
Docker Hub 中的官方镜像,一般都默认设置为 UTC 时间。而我们位于东八区,在启动容器或构建自己的镜像时...
扫描右侧二维码阅读全文
12
2019/01

在 Docker 中设置时区

Docker Hub 中的官方镜像,一般都默认设置为 UTC 时间。而我们位于东八区,在启动容器或构建自己的镜像时,往往需要对时区进行设置。根据基础镜像的完整程度,设置时区的方法也有所区别。

基于 Debian 等比较完整的镜像

如果是基于 Debian 等比较完整的镜像,设置时区的方法比较简单,只需添加环境变量TZ即可。我们可以通过启动一个 Debian 容器,运行其中的date命令来验证。

root@677e5c1c1e19:/# date
Sat Jan 12 10:25:27 UTC 2019
root@677e5c1c1e19:/# export TZ=Asia/Shanghai
root@677e5c1c1e19:/# date
Sat Jan 12 18:25:44 CST 2019

当需要在容器中使用本地时间的时候,只需在启动容器时,添加参数-e TZ=Asia/Shanghai即可。

如果是构建 Docker 镜像,可以这样写:

FROM debian:stretch

ENV TZ=Asia/Shanghai

基于 Alpine 等比较精简的镜像

但不是所有的镜像中都含有完整的时区数据,只设置环境变量不能起作用。此时需要设置时区,则需要先安装tzdata,此处以 Alpine 为例。

/ # date
Sat Jan 12 10:37:07 UTC 2019
/ # export TZ=Asia/Shanghai
/ # date
Sat Jan 12 10:37:34 UTC 2019
/ # apk add tzdata
......
......
/ # date
Sat Jan 12 18:38:18 CST 2019

由于无法直接通过环境变量设置时区,因此需要在容器中使用本地时间时,只能先基于原有的镜像构建自己的镜像,在启动容器时使用自己构建的镜像即可。

FROM alpine:3.8

ENV TZ=Asia/Shanghai

RUN apk update \
    && apk add tzdata \
    && echo "${TZ}" > /etc/timezone \
    && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
    && rm /var/cache/apk/*
最后修改:2019 年 01 月 13 日 10 : 22 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论