Docker 时区问题

一、问题描述
遇到docker时间不一致,大多是因为默认时区没有设置导致,一般在宿主机上使用 date 命令看到的是 CTS 时间,进入docker后使用 date 命令查看的是 UTC 时间。
CTS: China Standard Time,UTC+8:00 中国沿海时间(北京时间)
UTC: Universal Time Coordinated 世界协调时间

所以我们需要修改 docker 容器的时区,针对不同场景修改的方式也不一样,大家可以参考一下选择最适合自己的修改方式

二、修改 Dockerfile 文件方式更改时区
适用场景:如果我们是用 Dockerfile 方式构建的镜像,那么我们可以修改 Dockerfile 让构建的镜像直接为东八区

在 Dockerfile 文件中 添加

ENV TZ=Asia/Shanghai

重新构建镜像,查看时间,发现已经是东八区,成功。

三、新增 run 参数更改时区
适用场景:不想重新构建镜像,删除容器重新部署对程序本身没有影响

删除 容器

docker rm -f tomcat
run 的时候加上参数

-e TZ=”Asia/Shanghai”
例如

docker run -e TZ=”Asia/Shanghai” -p 8090:8090 -d –name ch ch/ch
-e 时区改为东八区,默认时区为0区

-p 暴露端口 前面的端口(docker tomcat 容器端口) 后面的端口(宿主机器端口,我们要在浏览器访问的端口)

-d 后台运行(不会在控制台输出日志)

完成后 查看时间,已经是东八区,成功

四、修改 tomcat 配置文件更改时区
适用场景:tomcat 容器运行的程序,不想重新构建镜像容器

注意:交付的Docker映像已修剪到最低限度-因此,拉取的容器未安装任何编辑器,所以无法 进入到容器编辑配置文件。

所以得将配置文件 copy 一份到本地

docker cp tomcat:/usr/local/tomcat/bin/catalina.sh .

修改 catalina.sh 配置文件

找到 JAVA_OPTS=”$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources” 这一行 行尾添加 Duser.timezone=GMT+08

JAVA_OPTS=”$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Duser.timezone=GMT+08″
然后将修改后的配置文件,覆盖掉容器内的

docker cp .\catalina.sh tomcat:/usr/local/tomcat/bin/catalina.sh
最后重启容器

docker restart tomcat
发现时区已经改为 东八区 ,成功。
————————————————
版权声明:本文为CSDN博主「码农农码一生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chenhao_c_h/article/details/110041401

Share