Docker部署tomcat

拉取tomcat镜像

docker pull tomcat:8.5

创建容器并运行

docker run -d --name jsoncrack -p 8080:8080 tomcat:8.5

此时可以访问ip:8080,但是404,因为webapps里没有ROOT文件夹

进入容器创建ROOT文件夹,然后退出

docker exec -it jsoncrack /bin/bash
cd /usr/local/tomcat/webapps/
mkdir ROOT
exit

将宿主机的文件拷贝到容器里

docker cp /a/b/c/ jsoncrack:/usr/local/tomcat/webapps/ROOT

完成!

本文转载于网络 如有侵权请联系删除

相关文章

  • 漫画:什么是八皇后问题?

    —————第二天—————题目是什么意思呢?国际象棋中的皇后,可以横向、纵向、斜向移动。如何在一个8X8的棋盘上放置8个皇后,使得任意两个皇后都不在同一条横线、竖线、斜线方向上?让我们来举个栗子,下图的绿色格子是一个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些格子:下图的绿色格子是两个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些格子:那么,如何遵循规则,同时放置这8个皇后呢?让我们来看看小灰的回答。————————————什么是八皇后问题?八皇后问题是一个古老的问题,于1848年由一位国际象棋棋手提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,如何求解?以高斯为代表的许多数学家先后研究过这个问题。后来,当计算机问世,通过计算机程序的运算可以轻松解出这个问题。如何解决八皇后问题?所谓递归回溯,本质上是一种枚举法。这种方法从棋盘的第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后。如果当前位置无法摆放,则向右移动一格再次尝试,如果摆放成功,则继续递归一层,摆放第三个皇后...

  • EasyNVR中如何对kernel内核的异常关闭状态做监测?

    大家知道我们有一套核心的流媒体服务,即EasyDSS_kernel,目前基于EasyDSS-Kernel的多款商业软件(EasyDSS流媒体服务器、EasyNVR智能云终端、EasyGBS国标流媒体服务、EasyNVS视频综合管理平台)已经在旅游业、教育业、物流仓储、平安工地、能源环保、广电行业、工业与物联网、智能农业、视频智能分析等几乎所有的行业都已服务并稳定运营多年。在部分情况下,用户在使用EasyNVR时,其中的kernel内核如果异常关闭,则会导致所有EasyNVR视频拉流传输失败,在其他平台软件中也同样存在此问题。因此针对这个问题,我们开发了一套定时任务检测机制,用来判断kernel内核是否正常运行,本文就介绍一下我们对此功能的实现方式。定时任务检测实现://定时任务检测kernel服务是否正常运行 s:=gocron.NewScheduler(time.Local) s.Every(5).Seconds().Do(checkMs) s.StartAsync()复制在定时任务中定时检测所有直播接口是否正常响应,如果接口请求失败在根据kernel的进程ID,判断进程是否正常运行

  • 字符串反转

    题目:给定一字符串,实现反转,如“qwerty”反转成“ytrewq”代码演示:第一种实现方式:// 字符串转成数组,然后数组倒序输出 privatestaticvoidreserve(Stringstr){ char[]chars=str.toCharArray(); for(inti=chars.length;i>0;i--){ System.out.print(chars[i-1]); } }复制第二种实现方式:// 找出中间点,实现两边顺序互换 publicstaticStringreverse(Stringstr){ if(str.length()<=1){ returnstr; } Stringleft=str.substring(0,str.length()/2); Stringright=str.substring(str.length()/2,str.length()); returnreverse(right)+reverse(left); }复制

  • SpringCloud+MyBatis分页处理(前后端分离)

    分页处理,这是做JavaWeb项目中常见的场景。背景:系统架构:SpringCloud分布式持久层:MyBatis前端:前后分离vue.js/bootstrap等.后台提供restfulapi接口,前端访问后端接口展示数据。2种方式提供分页处理方案:一、直接MyBatis数据库进行分页controller接口@ApiImplicitParams({ @ApiImplicitParam(name="categoryId",value="支付渠道大类Id",required=false,dataType="Long",paramType="query"), @ApiImplicitParam(name="payChannelId",value="支付渠道ID",required=false,dataType="Long",paramType="query"), @ApiImplicitParam(name="bankCod

  • 李飞飞现身西南偏南:AI不该只属于硅谷科技巨头

    Root编译整理 量子位出品|公众号QbitAI即便不断推动AI技术进步的还是硅谷公司,但不止这些公司在参与,更重要的是希望所有人都受益其中。李飞飞今天在西南偏南上说。和前白宫CTO,现任Shift7CEOMeganSmith一起,李飞飞出席了西南偏南的AI主题的圆桌讨论。FoundationCapital合伙人JoanneChen负责主持这次讨论。西南偏南,SXSW,是在美国德州Austin举办的一年一度的电影、交互式多媒体和音乐的艺术节与大会。是时候把AI和社会科学、人文科学结合在一起,然后研究AI如何对我们的社会、法制系统、组织、民主系统、教育、道德产生深远影响。李飞飞谈到,“我再强调一下,AI不该只属于硅谷的科技巨头公司。他们本身有责任去利用好AI造福每一个人,但是他们也有责任让所有人都可以参与到AI技术发展里。”引导下一代除了在谷歌任职,李飞飞也是斯坦福的副教授,同时担任斯坦福计算视觉实验室的主任。她把自己的教学工作和技术研究工作放在首位。李飞飞同时也是AI4ALL的创始人。AI4ALL是一个非盈利组织,旨在帮助高中学生更好的理解AI,一起学习机器学习并尝试解决问题。△增加科

  • java线程池详解

    一、为什么使用线程池在java中,执行任务的最小单位是线程。我们知道,线程是一种稀缺的资源,它的创建于销毁是一个非常耗费资源的操作,而Java线程依赖于内核线程,其线程的创建需要进行操作系统状态的切换,为了避免多度消耗资源需要设法重用线程去执行多个任务。而线程池具备缓存和管理线程的功能,可以很好的对线程进行统一分配、监控和调优。什么时候使用线程池?单个任务处理时间比较短需要处理的任务数量很大线程池优势可总结如下:重用已经存在的线程,减少线程的频繁创建、销毁过程的性能开销,提神整体性能提高响应速度。当任务到达的时候,任务可以不需要等到线程创建就能立即执行提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会大量的消耗系统的CPU资源,还会降低系统稳定性,使用线程池可以对创建的线程进行统一分配、管理、监控和调优线程池生命周期通过下面这张图,可以帮助我们理解线程池的生命周期,也更好的理解代码二、常用线程池创建方式jdk1.8之前,自带了如下4种创建线程池的方式1、newSingleThreadExecutor 2、newCachedThreadPool 3、newFixedThread

  • Think in Java之多态

    theme:channing-cyan多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态方法调用允许亿欧汇总类型表现出与其他相似类型之间的区别。向上转型导出类从基类继承而来,所以存在于基类中的接口也必定存在于导出类中。将导出类转换为基类称作“向上转型”,上是按照类的继承关系为方向的。增加扩展性当我们想调用基类的某个方法时,不同的导出类都会有不同的行为,只需覆盖该方法即可。当有新的导出类时我们不必定义新方法去做事情直接覆盖基类的方法版本编译器自动帮我们定位到时机调用的导出类的方法。我们只在基类中写一个简单方法,它只接受基类类型为参数,而不是特殊的导出类,也就是说在调用方法的时候不考虑导出类的存在,编写的代码只是和基类打交道,具体的行为编译器帮我们自动判断该调用哪个方法版本。方法绑定编译器如何得知这个基类类型是哪个导出类类型呢?比如DShape有三个导出类:Circle,Rect,Triangle;并且这三个导出类都复写了父类的方法,编译器如何得知真实的类型是这三个中的哪个呢?编译器也无法得知。将一个方法调用同一个方法主体关联起来被称作绑定。在程序执行前进行的绑定叫做前期绑定

  • Exceeded memory limit for $group, but didn&#39;t allow external sort. Pass allowDiskUse:true to opt in

    问题:Exceededmemorylimitfor$group,butdidn'tallowexternalsort.PassallowDiskUse:truetooptin mongodb执行管道操作时出现如上错误; 原因:管道操作最大只支持16M的结果,超过就会报错。 解决:增加{allowDiskUse:true},其实错误上已经提醒了。 原来查询语句: db.report_face.aggregate([{ "$group":{ "_id":{ "aa":"$aa", "bb":"$bb" }, timestampList:{ "$push":{ "ss":"$ss", "dd":"$dd" } } } }])复制 改后: db.report_face.aggregate([{ "$group":{ "_id":{ "aa":"$aa", "bb":"$bb" }, timestampList:{ "$push":{ "ss":"$ss", "dd":"$dd" } } } }],{allowDiskUse:true})复制 如上是mongodb的查询语句的更改方法,要

  • Farseer.net轻量级开源框架 入门篇:添加数据详解

    导航 目   录:Farseer.net轻量级开源框架目录 上一篇:Farseer.net轻量级开源框架入门篇:分类逻辑层 下一篇:Farseer.net轻量级开源框架入门篇:修改数据详解 前面讲的大多数是原理及说明,大家在理解上会比较枯燥,接下来的几篇,倾向于实战,会比较有意思些。  这里的话,还是拿Users实体类来讲解在我们框架的几种添加方式。 Insert的几种方式 1Usersinfo=newUsers(); 2info.UserName="张三"; 3Users.Data.Insert(info);复制 1newUsers(){UserName="张三"}.Insert();复制 两种方式都可以实现对数据的添加操作。 第二种方式实际也是执行第一种的过程。只不过是做了扩展方法。 Insert的重载版本 1///<summary> 2///插入数据 3///</summary> 4///<paramname="info">已赋值的实体</param> 5///<param

  • Feign传输Multipartfile文件的正确方式,Current request is not a multipart request报错解决

    前言 最近公司有个需求在前端上传ppt/pdf等文件到后台经过解析转换成图片后再  Feign调用文件服务上传到服务器   1、FileFeignApi的接口是这样的... @ApiOperation(value="上传") @PostMapping("/upload") StringuploadFile(@RequestParam(required=true,name="fileType")@ApiParam(required=true,value="上传文件的类型")IntegerfileType,@RequestParam(required=true,name="file")MultipartFilefile);复制 却发现老是报如下异常 org.springframework.web.multipart.MultipartException:Currentrequestisnotamultipartrequest.......复制 经过一番研究终于发现问题了,原来 文件流要用 @RequestPart 注解传参

  • 完美搞定《DOCKER IN ACTION》第二章示例

    摘要: 起来!!!命令如下:建立第一个webdockerdockerrun--detach--namewebnginx:latest 建立第二个web_testdockerdockerrun--interactive--tty\--link... 起来!!!命令如下: 建立第一个webdocker dockerrun--detach--namewebnginx:latest复制   建立第二个web_testdocker dockerrun--interactive--tty\ --linkweb:web\ --nameweb_test\ busybox:latest/bin/sh复制   建立第三个mailerdocker dockerrun-d--namemailerdockerinaction/ch2_mailer复制   建立第四个agentdocker dockerrun-it\ --nameagent\ --linkweb:insideweb\ --linkmailer:insidemailer\ docke

  • FCN训练注意事项

    1.如果是类别受两类,需要把标签图二值化为0,1  

  • [转]Docker报错“Dockerfile parse error line 1: FROM requires either one or three arguments”

    原文地址:https://www.cnblogs.com/lfri/p/11621619.html 看官方文档Format: 以'#'开头一行被视为评论,出现在其他位置视为参数。 也就不难理解报错原因:将写在同一行的注释视为参数了。 原Dockerfile:  改为:

  • [总结] 四毛子算法

    [总结]四毛子算法 【模板】ST表 四毛子算法,又叫**theMethodofFourRussians**,复杂度为\(\textO(n+m)\),可以在线性时间内求解RMQ问题。 四毛子重要的不是算法,重要的是一种序列问题的转化思想。 笛卡尔树 把原序列的笛卡尔树建出来,堆顶大小根据题目而定。 对于原序列的一个区间\([L,R]\),在笛卡尔树中找到其对应位置,它们的\(LCA\)就是求解的答案。 \(LCA\)问题的处理 在Enler序上解决,也就是欧拉序,也就是在欧拉序上的一个新的RMQ问题。 而在欧拉序上的RMQ求解的就不是\(value\)的RMQ问题了,而是找到区间\([L,R]\)深度最小的点。 四毛子算法的主要思想就基于此:原来的不规则RMQ问题转化为了\(±1\)RMQ问题,也就是说,相邻两个点最多变化\(1\),且一定变化。 \(±1\)RMQ问题求解 设\(t\)为Enler序列的长度,取块长\(b=\lceil\frac{\log_2t}{2}\rceil\)。对欧拉序列进行分块,使用ST表处理大块间的信息维护,复杂度为\(\textO(\fra

  • Oracle EBS-SQL (BOM-18):检查BOM与工艺路线对照.sql

    /*有工艺路线,无BOM清单*/ selectmsi.segment1,         msi.description fromapps.BOM_OPERATIONAL_ROUTINGSbor,         apps.mtl_system_items_bmsi wheremsi.organization_id=Y   and  bor.organization_id=msi.organization_id   and  bor.assembly_item_id=msi.inventory_item_id   and  notexists(select'X'             &nb

  • SCOI 2019 游记

    写在前面 其实冬令营之后就有一些想说的内容,由于心情原因没有写出来。PKUWC失误频频,唯一可能还有点价值的就是Day2T3计算几何推了76分出来。NOIWC更是无心再谈,感觉是被提答送走远了。不过归根结底还是自己的问题。 转眼间快三个月过去了,期间一直在广泛做题,也学了一些新的算法。有没有成效,就在省选考场上验证吧。希望不要再向去年那样颓废了。 笔试面试差评。 4.12(Day0) 下午笔试。 100道单选题几分钟就写完了,当然还是喜闻乐见地出了一些小锅。一些经典的锅见知乎如何评价SCOI2019,这里就不再赘述了。 4.13(Day1) 拿到题之后打算顺序开。 看完T1瞬间整个人都不好了。为什么一来T1就感觉不可做啊?于是先打了个30分的模拟。正准备弃疗的时候突然发现第二档部分分也满足\(M\leq10\),于是简单改了下,写了个lower_bound,这样应该就有50分了。 这时T1暂时没有更好的想法。时间还比较多,于是我把T2和T3都浏览了一遍。发现T3好像是个数学题,似乎可以推一推,于是准备优先写T3。不过在这之前,我得先看一下T2好不好拿分。 结果看完T2后只胡了一个高复杂

  • C++标准库之迭代器

    迭代器大致可分为: 输入迭代器,InputIterator 输出迭代器,OutputIterator 前行迭代器,ForwardIterator 双向迭代器,BidirectinalIterator 随机访问迭代器,RandomAccessIterator   另外,到反向迭代器也需要注意,尤其是正常迭代器转换为反向迭代器之后。反向迭代器的逻辑位置(指向的值),物理地址(指向的元素)。  

  • 010_硬件基础电路_数字地和模拟地

    https://blog.csdn.net/kevinhg/article/details/12080751    二者本质是一直的,就是数字地和模拟地都是地。要明白为什么要分开,先听一个故事;我们公司的商务楼,2楼是搞模拟的,3楼是搞数字的,整幢楼只有一部电梯,平时人少的时候还好办,上2楼上3楼互不影响,但每天上下班的时候就不得了了,人多得很,搞数字的要上3楼,总是被2楼搞模拟的人影响,2楼模拟的人要下楼,总是要等电梯上了3楼再下来,互相影响很是麻烦,商务楼的物业为解决这个问题,提出了2个方案:第1个(笑死人了)电梯扩大,可以装更多的人,电梯大了是好,但公司会招人,人又多了,再换电梯,再招人...永远死循环,有一个办法到挺好,大家索性不要电梯,直接往下跳,不管2楼的3楼的,肯定解决问题,但肯定会出问题(第1个被枪毙掉了)。第2个办法装2部电梯,一部专门上2楼,另一部专门上3楼,Wonderful!太机智了,这样2层楼面的工作人员就互不影响了。明白了否?        数字地、模拟地互相会影响不是

  • 洛谷p1017 进制转换(2000noip提高组)

    洛谷P1017进制转换 题意分析 给出一个数n,要求用负R进制显示。 n∈[-32768,32767]。R∈[-20,-2] 考察的是负进制数的转换,需要理解短除法。 看到这道题的时候,我是比较蒙圈的。随手拿短除法试了试,但是发现结果不对。最明显的原因,一个数对一个负数取模,结果可能是一个负数。 联想一下在做进制转化的时候,实在不断地做【除】和【取余】的操作。取余直接是取的余数,在做除法的时候,其实是有一个向下取整的过程。如: 我们对125做短除法,余数为1时,125/2=72.5。实际写的时候写的是72。也可以理解为,已经把余数拿出来,其实是124/2=72. 刚才说在对负数取模后结果可能是一个负数,解决负数的方法,就是在取模结果减去进制数(进制是负数),这样就能变成正数。但是别忘了,数字本身要减1,类似于对正数进制的下取整操作。 代码总览 #include<bits/stdc++.h> #definenmax10000 usingnamespacestd; charans[30]="0123456789ABCDEFGHIJKLM"; intmain

  • php&#160;string的操作

    strstr(string,string)=strchr(,)//从前面第一次出现某个字符串的地方截取到最后 strrchr(string,string)//从某个字符串从最后出现的位置截取到结尾 strpos(string,string[,int])//某个字符串第一次出现的位置 strrpos(string,string)//某个字符串最后一次出现的位置 substr(string,int[,int])//从指定位置开始截取字符串,可以指定截取的长度。 strlen(string)//获取字符串的长度 复制

  • zookeeper脚本

    1)在hadoop102的/home/atguigu/bin目录下创建脚本 [atguigu@hadoop102bin]$vimzk.sh  在脚本中编写如下内容 #!/bin/bash  case$1in"start"){  foriinhadoop102hadoop103hadoop104  do        echo----------zookeeper$i启动------------  ssh$i"/opt/module/zookeeper-3.5.7/bin/zkServer.shstart"  done };;"stop"){  foriinhadoop102hadoop103hadoop104  do        echo----------zookeeper$i停止------------   &nbs

相关推荐

推荐阅读