Docker容器时间与主机时间不一致的问题

目录

问题现象

Docker 容器与主机的时间不一致。

例:主机时间为 22:42:44 CST(东八区),容器时间为 14:43:31 UTC(标准时间),相差 8 小时。

# 主机
date
# 2016年 07月 27日 星期三 22:42:44 CST

# 容器
date
# Wed Jul 27 14:43:31 UTC 2016

根本原因是时区不一致:CST(China Shanghai Time)是东八区,UTC 是标准时间。

解决方案

方案一:共享主机的 localtime

创建容器时,指定启动参数挂载 localtime 文件到容器内,保证两者时区一致:

docker run --name <name> -v /etc/localtime:/etc/localtime:ro ....

方案二:复制主机的 localtime

docker cp /etc/localtime <容器ID或NAME>:/etc/localtime

注意:更新时间后,容器中运行的程序(如 MySQL)不一定能立即读取到新时间,必须重启该服务或重启容器。

# 示例:查询 MySQL 时间(更新后需要重启 MySQL)
select now() from dual;

方案三:创建自定义 Dockerfile

创建 Dockerfile,在镜像中自定义时区和时间格式:

FROM redis
FROM tomcat
ENV CATALINA_HOME /usr/local/tomcat

# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

利用 docker build 命令生成镜像后使用即可。

建议

时区设置建议在制作镜像时就完成,这样所有基于该镜像的容器都会有正确的时区。

#docker