使用Docker部署Tomcat

1. 获取镜像

docker pull tomcat:8.5.38

docker images

2. 第一次启动tomcat

该步骤作用:是为了拷贝容器中Tomcat中的conf下配置文件和webapps下的管理页面,用于后面自定义Tomcat服务器配置或者部署应用。

第一次启动:

docker run -d --name tomcat8 -p 8081:8080 tomcat:8.5.38

在宿主机创建文件夹:

/home/tomcat8

从容器中拷贝配置文件和应用到宿主机中:

docker cp tomcat8:/usr/local/tomcat/conf/ /home/tomcat8/
docker cp tomcat8:/usr/local/tomcat/webapps/ /home/tomcat8/

3.带参数启动

docker run --name tomcat8 -p 1808:8080  \
-v /home/tomcat8/conf:/usr/local/tomcat/conf \
-v /home/tomcat8/webapps:/usr/local/tomcat/webapps \
-v /home/tomcat8/logs:/usr/local/tomcat/logs \
-v /etc/localtime:/etc/localtime:ro \
-v /serverdata/conf/tsmsg/:/serverdata/conf/tsmsg \
-e TZ=Asia/Shanghai \
-d tomcat:8.5.38
-v /serverdata/conf/tsmsg/:/serverdata/conf/tsmsg

这个为应用本身的配置文件映射,根据实际需求来。

-v /etc/localtime:/etc/localtime:ro

这个命令的作用是将宿主机上的时区设置文件(/etc/localtime)挂载到Docker容器中相同的位置,使容器能够使用与宿主机相同的时区设置。

具体来说,这个命令的各部分意义如下:

  • -v:这是Docker命令用来指定挂载卷的标志(Volume)。
  • /etc/localtime:这是宿主机上时区文件的路径。该文件包含了当前时区的信息。
  • :/etc/localtime:这是容器内部的挂载点,即容器内与宿主机/etc/localtime文件对应的路径。
  • :ro:这表示以只读方式挂载(Read-Only)。容器可以读取该文件,但无法修改它,这样可以防止容器的操作影响宿主机的时区设置。

这样做的好处是保证容器内的应用程序可以正确处理与时区相关的操作,例如记录日志的时间戳、执行定时任务等。这对于需要时区一致性的应用程序来说非常重要。例如,如果你在上海运行宿主机,而你的容器也应当使用东京的时区,通过这种方式挂载/etc/localtime,你的容器将会自动采用上海的时区,而无需在容器内单独配置时区。

4.查看tomcat日志

1通过看宿主机 /home/tomcat8/logs 下的日志

通过docker logs -f tomcat8 查看日志

5.时区问题

如果你的应用用的是Oracle数据,可能会遇到这样的错:

Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found

这个错误信息是由Oracle数据库返回的,表示有两个错误:

  1. ORA-00604: 这个错误表明在递归SQL级别(即Oracle内部操作)发生了错误。递归SQL是Oracle在处理用户SQL语句时内部自动执行的SQL语句,常见于触发器、登录逻辑等。
  2. ORA-01882: 这个错误表明找不到指定的时区地区。当数据库或JDBC驱动试图访问特定的时区信息,而该信息在数据库的时区文件中不存在或未被识别时,就会出现这个错误。

这两个错误一起出现可能意味着在执行初始化会话时,比如在用户登录时设置会话的时间区域,Oracle发现它不能识别或找到该时区。

这时候你会搜索到要同步时区,需先设置好宿主机的时区:

timedatectl set-timezone Asia/Shanghai

再在容器启动时添加

-v /etc/localtime:/etc/localtime:ro

或许,会发现宿主机的时间不对,可用

date -s "20240131 11:31:00"

更改一下宿主机的时间

使用Docker部署Tomcat的更多相关文章

  1. 【转】Docker部署Tomcat及Web应用

    Docker部署Tomcat及Web应用 - Scofield_No1的博客 - CSDN博客https://blog.csdn.net/qq_32351227/article/details/786 ...

  2. Docker容器和本机之间的文件传输 使用Docker部署Tomcat项目

    Docker容器和本机之间的文件传输. http://blog.csdn.net/leafage_m/article/details/72082011 使用Docker部署Tomcat项目 http: ...

  3. Docker部署Tomcat实例

    1.使用Docker部署Tomcat服务 http://www.open-open.com/lib/view/open1455717671698.html 2.搭建docker私有仓库 http:// ...

  4. 在华为云ECS上手工通过Docker部署tomcat

    本文介绍了如何在华为云上ECS上手工通过Docker部署tomcat,并提供了Docker常用操作 一.环境准备 ECS:操作系统版本:    CentOS Linux release 7.6.181 ...

  5. Docker部署tomcat及应用

    前提Docker已安装完成. 由于测试网无法直接连入互联网,所以在本机虚拟机内下载tomcat镜像并传到测试网主机中. 虚拟机内执行 查找tomcat镜像: # docker search tomca ...

  6. docker 部署tomcat

    使用Docker搭建Tomcat运行环境 1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS ...

  7. Docker部署Tomcat,Nginx,Redis应用

    一.tomcat部署 1.拉取tomcat镜像 docker pull tomcat:7-jre7 2创建tomcat容器 创建容器用于部署单点登录系统(CAS)  -p表示地址映射 docker r ...

  8. 2. Docker部署tomcat, nginx, redis,及docker私有仓库

    1. 部署tomcat 1.1 下载tomcat       docker pull tomcat:7-jre8 1.2 部署容器  docker run -di --name=tomcat -p 8 ...

  9. Docker部署tomcat+nginx+mysql,创建一个tomcat集群

    Docker的部署可以选择虚拟机或者云服务器,我自己选择的是本机安装centos7虚拟机: 1.虚拟机安装登录成功后开始部署docker: 首先了解docker是一个开源应用容器引擎,基于Go语言遵循 ...

  10. docker 部署 tomcat

    1.搜索tomcat信息 docker search tomcat 2.下拉tomcat 镜像 docker pull tomcat 3.运行tomcat docker run -d --name=t ...

随机推荐

  1. #1198:Farm Irrigation(DFS + 并查集)

    Farm Irrigation **Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...

  2. ACM | 动态规划-数塔问题变种题型

    前言 数塔问题,又称数字三角形.数字金字塔问题.数塔问题是多维动态规划问题中一类常见且重要的题型,其变种众多,难度遍布从低到高,掌握该类型题目的算法思维,对于攻克许多多维动态规划的问题有很大帮助. 当 ...

  3. Android 3分钟带你入门开发测试

    作者:Zhu Yifei 作为一名合格的开发人员,基本的开发测试能力必不可少,开发测试分单元测试和UI测试,通过开发测试可以减少开发人员自测时间,提升开发质量.本篇文章可以帮助初级开发人员快速了解开发 ...

  4. Kafka 社区KIP-405中文译文(分层存储)

    原文链接:https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage 译者:Kafka KIP- ...

  5. C# 用树形列表 动态 显示菜单

    如图 页面加载 private void Form1_Load(object sender, EventArgs e) { GetMenu(treeView1, menuStrip1);//将menu ...

  6. ApplicationContextAware 的理解和应用

    当我们在项目中获取某一个spring bean时,可以定义一个类,实现ApplicationContextAware  该接口,该接口可以加载获取到所有的 spring bean. package c ...

  7. 为什么 sort() 中的 return a-b 可以决定升序

    arr.sort( function(a,b){ return a-b; } ) 千万不要理解成 a 减 b 其实它代表的是26个字母中的 a 和 b b 比 a 大,所以 a - b 就是升序,写成 ...

  8. Spring————IOC入门学习

    Spring----入门学习 简介 优点 Spring是一个开源的免费的框架(容器)! Spring是一个轻量级,非入侵式的框架 控制反转(IOC),面向切面编程(AOP) 支持对事务的处理,对框架整 ...

  9. Go-发送邮件

    1. 邮件 - mail From -- 发送者(这封邮件由谁进行发送的,一般都是该邮件的作者) To -- 邮件的接收者(发送邮件的人希望谁能收到邮件) Subject -- 邮件的主题(类似文章的 ...

  10. Django-Import-Export插件关于外键的处理

    前言 Django-Import-Export是一款很好用很方便的Django数据导出导入插件,可以和DjangoAdmin管理后台完美集成,只需要少量的代码配置即可方便实现你要的多种格式导出导入,关 ...