Docker(三):Docker 部署 SpringBoot 项目
Docker(四):Docker 部署 tomcat 运行war包
一、问题描述
遇到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
发现时区已经改为 东八区 ,成功。