📜  Docker 容器时间和时区 (1)

📅  最后修改于: 2023-12-03 15:30:32.306000             🧑  作者: Mango

Docker 容器时间和时区

概述

Docker 容器初始时是继承宿主机的时间和时区的,但容器运行后可以单独设置自己的时间和时区。本文将介绍 Docker 容器中的时间和时区相关操作。

时间的几个概念

在介绍 Docker 容器的时间和时区之前,我们先了解一下时间的一些概念:

  • UTC 时间:协调世界时(UTC,Universal Time Coordinated)是最基础也是最普遍的时间标准,全球范围内的时间都以 UTC 为基准。
  • 时区:为了使每个地区的时间都和太阳的日出日落时间保持一致,GMT(格林威治时间)被分成24个时区,每个时区相差 1 小时,东面的时区时间比西面的晚,每个时区可以使用相应的缩写表示,如北京时间为 GMT+8。
  • 时间戳(Unix timestamp):是指自1970 年 1 月 1 日 00:00:00 GMT(格林威治标准时间)起至现在的总秒数。在 Linux 系统中,时间戳被广泛使用,如在日志中记录时间、计算程序执行时间等等。
查看容器中的时间和时区

我们可以使用以下命令来查看容器当前的时间和时区:

docker exec <container_id/name> date
docker exec <container_id/name> cat /etc/timezone
修改容器中的时间和时区
时间设置

我们可以使用以下命令修改容器的时间,其中 指定时间戳(秒):

docker exec <container_id/name> date -s "@<timestamp>"

如将容器时间设置为 2022 年 1 月 1 日 00:00:00:

docker exec <container_id/name> date -s "@1640976000"
时区设置

我们可以使用以下命令设置容器的时区,其中 为所需时区的缩写(如北京时间为 Asia/Shanghai):

docker exec <container_id/name> ln -sf /usr/share/zoneinfo/<timezone> /etc/localtime

如设置容器时区为北京时间:

docker exec <container_id/name> ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

注意事项:某些 Linux 发行版的容器,可能没有 /usr/share/zoneinfo 目录,这时需要先在容器内安装 tzdata 包来提供时区信息,可使用以下命令进行安装:

docker exec <container_id/name> apt-get update && apt-get install -y tzdata
通过 Dockerfile 设置容器的时间和时区

我们可以在 Dockerfile 中预设容器的时间和时区,以便在容器启动时自动应用。以下是示例 Dockerfile:

FROM ubuntu:latest

# 设置时区为北京时间
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 设置时间为 2022 年 1 月 1 日 00:00:00
RUN date -s "@1640976000"
结论

Docker 容器的时间和时区与宿主机的关系并不复杂,本文主要介绍了如何查看容器中的时间和时区,以及如何修改容器的时间和时区,以及通过 Dockerfile 预设容器的时间和时区。开发者可以根据自己的需求进行操作,使容器中的时间和时区更符合实际情况。