Docker(五):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重启容器命令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
发现时区已经改为 东⼋区 ,成功。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。