We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Docker 时区调整方案 https://cloud.tencent.com/developer/article/1626811
对于经常使用 Docker 的人来说,可能会碰到一个问题:时区问题。
大部分 Docker 镜像都是基于 Alpine,Ubuntu,Debian,CentOS 等基础镜像制作而成。
基本上都采用 UTC 时间,默认时区为零时区。
docker run --name test --rm -ti alpine /bin/sh / # date Fri Nov 29 08:14:49 UTC 2019 复制 而我们主要用的是 CST 时间,北京时间,位于东八区。时区代号: Asia/Shanghai
docker run --name test --rm -ti -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro alpine /bin/sh / # date Fri Nov 29 16:13:55 CST 201 复制 对比一下,我们会发现,时间上相差 8 小时。
经过一系列探索实践,我们总结了一些 Docker 时区调整方案。
一、运行 Docker 容器时调整时区 在 Linux 系统中,控制时区和时间的主要是两个地方:
/etc/timezone 主要代表当前时区设置,一般链接指向/usr/share/zoneinfo目录下的具体时区。 /etc/localtime 主要代表当前时区设置下的本地时间。
-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro 复制 使用示例如下:
docker run --name test --rm -ti -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro alpine /bin/sh / # date Fri Nov 29 16:13:55 CST 2019 复制 2. 通过传递环境变量改变容器时区 适用于基于 Debian 基础镜像, CentOS 基础镜像 制作的 Docker 镜像 不适用于基于 Alpine 基础镜像, Ubuntu 基础镜像 制作的 Docker 镜像 对于基于 Debian 基础镜像,CentOS 基础镜像制作的 Docker 镜像,在运行 Docker 容器时,传递环境变量-e TZ=Asia/Shanghai进去,能修改 docker 容器时区。
-e TZ=Asia/Shanghai 复制 使用示例如下:
docker run --name test -e TZ=Asia/Shanghai --rm -ti debian /bin/bash /# date Fri Nov 29 18:46:18 CST 2019 复制 二、制作 Docker 镜像时调整时区 通过编写 Dockerfile,构建自己的 Docker 镜像,可以永久解决时区问题。
ENV TZ Asia/Shanghai
RUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && apk del tzdata 复制 2. Debian Debian 基础镜像 中已经安装了 tzdata 包,我们可以将以下代码添加到 Dockerfile 中:
ENV TZ=Asia/Shanghai DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata && rm -rf /var/lib/apt/lists/* 复制 3. Ubuntu Ubuntu 基础镜像中没有安装了 tzdata 包,因此我们需要先安装 tzdata 包。
我们可以将以下代码添加到 Dockerfile 中。
RUN apt update && apt install -y tzdata && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata && rm -rf /var/lib/apt/lists/* 复制 4. CentOS CentOS 基础镜像 中已经安装了 tzdata 包,我们可以将以下代码添加到 Dockerfile 中。
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone 复制 总结 时区问题是大问题。
时间没统一好,业务会乱套。
希望通过上面的内容,能够帮助大家解决好 Docker 方面的时区问题。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Docker 时区调整方案
https://cloud.tencent.com/developer/article/1626811
对于经常使用 Docker 的人来说,可能会碰到一个问题:时区问题。
大部分 Docker 镜像都是基于 Alpine,Ubuntu,Debian,CentOS 等基础镜像制作而成。
基本上都采用 UTC 时间,默认时区为零时区。
docker run --name test --rm -ti alpine /bin/sh
/ # date
Fri Nov 29 08:14:49 UTC 2019
复制
而我们主要用的是 CST 时间,北京时间,位于东八区。时区代号: Asia/Shanghai
docker run --name test --rm -ti -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro alpine /bin/sh
/ # date
Fri Nov 29 16:13:55 CST 201
复制
对比一下,我们会发现,时间上相差 8 小时。
经过一系列探索实践,我们总结了一些 Docker 时区调整方案。
一、运行 Docker 容器时调整时区
在 Linux 系统中,控制时区和时间的主要是两个地方:
/etc/timezone 主要代表当前时区设置,一般链接指向/usr/share/zoneinfo目录下的具体时区。
/etc/localtime 主要代表当前时区设置下的本地时间。
宿主机为 Linux 系统
当宿主机为 Linux 系统时,我们可以直接将宿主机上的/etc/timezone和/etc/localtime挂载到容器中,这样可以保持容器和宿主机时区和时间一致。
-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro
复制
使用示例如下:
docker run --name test --rm -ti -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro alpine /bin/sh
/ # date
Fri Nov 29 16:13:55 CST 2019
复制
2. 通过传递环境变量改变容器时区
适用于基于 Debian 基础镜像, CentOS 基础镜像 制作的 Docker 镜像
不适用于基于 Alpine 基础镜像, Ubuntu 基础镜像 制作的 Docker 镜像
对于基于 Debian 基础镜像,CentOS 基础镜像制作的 Docker 镜像,在运行 Docker 容器时,传递环境变量-e TZ=Asia/Shanghai进去,能修改 docker 容器时区。
-e TZ=Asia/Shanghai
复制
使用示例如下:
docker run --name test -e TZ=Asia/Shanghai --rm -ti debian /bin/bash
/# date
Fri Nov 29 18:46:18 CST 2019
复制
二、制作 Docker 镜像时调整时区
通过编写 Dockerfile,构建自己的 Docker 镜像,可以永久解决时区问题。
根据《Setting the timezone》提示,我们可以将以下代码添加到 Dockerfile 中:
ENV TZ Asia/Shanghai
RUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime
&& echo ${TZ} > /etc/timezone
&& apk del tzdata
复制
2. Debian
Debian 基础镜像 中已经安装了 tzdata 包,我们可以将以下代码添加到 Dockerfile 中:
ENV TZ=Asia/Shanghai
DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime
&& echo ${TZ} > /etc/timezone
&& dpkg-reconfigure --frontend noninteractive tzdata
&& rm -rf /var/lib/apt/lists/*
复制
3. Ubuntu
Ubuntu 基础镜像中没有安装了 tzdata 包,因此我们需要先安装 tzdata 包。
我们可以将以下代码添加到 Dockerfile 中。
ENV TZ=Asia/Shanghai
DEBIAN_FRONTEND=noninteractive
RUN apt update
&& apt install -y tzdata
&& ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime
&& echo ${TZ} > /etc/timezone
&& dpkg-reconfigure --frontend noninteractive tzdata
&& rm -rf /var/lib/apt/lists/*
复制
4. CentOS
CentOS 基础镜像 中已经安装了 tzdata 包,我们可以将以下代码添加到 Dockerfile 中。
ENV TZ Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime
&& echo ${TZ} > /etc/timezone
复制
总结
时区问题是大问题。
时间没统一好,业务会乱套。
希望通过上面的内容,能够帮助大家解决好 Docker 方面的时区问题。
The text was updated successfully, but these errors were encountered: