从零开始部署发布Java项目到服务器的Docker中
本以为很简单,由于没用过docker和java,本文将会阐述一路遇到的拦路虎。
首先,写好Java项目,本地跑通。
可能会遇到的问题:
1.jar包正常运行,war包404:
如何打包很多教程都有介绍,本文不重复赘述。
如果jar包正常,war包404,大概率是由于打包错误导致的(假如你不使用xml文件。需要在启动程序中添加extends spriingbootservletInitializer,并继承。

2.tomcat404
tomcat404除了上面的问题,那就是路径的问题。
war包放在waeapps中后会自动生成文件夹,如果war包名为root就可以在localhost:8080/根路径直接访问。否则就需要在localhost:8080/war包名/下访问程序。
3.tomcat404
tomcat版本问题,如果是jdk1.8就建议tomcat8以上版本
4.还是404,自己程序Idea可以运行,但是放在tomcat报错
可能是tomcat版本问题,如果tomcat版本比较低,只要数据库连接有问题,直接所有页面无法访问,然而新的版本tomcat,不连数据库的连接可以正常访问,连数据库的页面会报Whitelabel Error Page
因此建议jdk8用tomcat8.5
5.依然是404
打包问题,确保pom文件中,build包含你你所需的文件。例如如果你是theamleaf编写前端,必须要包含相关的teaamleaf文件。自然配置文件也必须包含在包里。可以通过解压缩观察包文件结构来判断是否为打包问题。
6.本地tomcat正常,但是docker无法访问8080端口
如果自己本地不是linux,docker run -p 无法完成映射,需要指定端口号映射,例如-p 8080:8080
例如我的:
docker build -t demo-image:v1 .
docker run -d -p 8080:8080 demo-image:v1
7.docker可以访问,但是数据库无法访问
mysql不可对外开放。在mysql状态下运行如下:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;
8.宿主机器的数据库无法访问
宿主机器在docker中无法通过localhost这类方式访问。
如果不是linux电脑,docker0也不存在。
可以使用host.docker.internal访问
本人mac,用docker.for.mac.host.internal也可以访问。
host.docker.internal如下:
url: jdbc:mysql://host.docker.internal:3306/javaDemo?allowPublicKeyRetrieval=true
9.Public Key Retrieval is not allowed错误解决方法
见问题7,?后增加allowPublicKeyRetrieval=true即可
10.docker无法push,报错denied: requested access to the resource is denied
docker页面中创建仓库
docker tag demo-image:v1 账号/test-image:v1
docker push 账号/tdemo-image:v1
我是在docker页面中创建仓库,然后执行相关指令,然后给自己本地镜像改名,解决此报错信息。
11.linux中docker 无法访问本地数据库
可能是我服务器centos无法host.docker.internal这种dns地址,所以使用ifconfig,找docker0的ip地址。
吧连接改为docker地址对于的ip。重新发布一下程序。
如何检索问题:
1.报错404
如果404,检查路径,是否能够正确对应上;检查打的包有没有问题。检查webapps里文件是否存在。
如果在docker中
docker exec -it 容器名 /bin/bash
可以进入容器目录的tomcat文件夹。容器名可以通过docker ps来查看
进入webapps文件夹查看自己的路径是否有文件。
2.如何确定打包问题
除了问题1外,打包问题都是缺少文件,直接解压缩war包,确定你所需要的文件都在war包中。尤其是配置文件,以及静态文件。
3.如何确定docker网络问题
可以通过docker exec -it 容器名 sh进入容器。
然后通过ping ip,比如你数据库连接
url: jdbc:mysql://host.docker.internal:3306/javaDemo?allowPublicKeyRetrieval=true
可以在docker内部ping host.docker.internal
判断docker是否正常连接相应ip,
如果 ip可以连,还需要确定是否能连接数据库。可以在其他任何计算机上
mysql -h IP -u test -P
来判断服务器数据库是否可以连接。
最后附上本人的dockerfile:
from tomcat:8.5
copy test.war /usr/local/tomcat/webapps/
expose 8080
其中,war包名字叫做test.war.
然后就可以使用IP:8080/test/来访问了。
如果名字是Root.war,就可以通过IP:8080/来访问。
从零开始部署发布Java项目到服务器的Docker中的更多相关文章
- 项目案例之Pipeline流水线发布JAVA项目(三)
项目案例之Pipeline流水线发布JAVA项目(三) 链接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取码:z7gj 复制这段内容后打开百度网 ...
- Centos 如何 发布Java项目
在发布Java项目之前,我们先要安装如下软件 一.Windows 1.winscp(Windows到centos上传下载) 2.PuTTY(Windows访问centos服务器) 3.Navicat客 ...
- 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目
jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...
- spring boot (2):spring boot 打包tomcat、tomcat 部署多个项目、服务器部署项目SSL 设置(阿里云)
一.spring boot 内置tomcat配置https: 关于自签名证书可以看下上一篇 spring boot1 更详细的可以看转载 https://www.jianshu.com/p/8d4ab ...
- 【图文】 使用ant编译和发布java项目
开发JavaEE项目经常会碰到修改代码后,项目没有重新编译的问题.老大给指明了一个解决办法:用ant编译项目. ant是apache基金会下的一个项目,是基于Java语言的构建工具. ...
- Dockerfile创建tomcat和jdk,并发布java项目
1.准备好需要的jdk 和 tomcat kun@ubuntu:~$ cd tomcat-docker/ kun@ubuntu:~/tomcat-docker$ ll total drwxrwxr-x ...
- 在CentOS(Linux)下用TomCat部署完java项目后,在Windows下可以访问8080,但无法通过输入页面名.jsp进入页面
错误描述:今天第一次在linux下部署项目,写了个测试的项目,在CentOS下放行8080端口后,在Windows下可以访问8080,出现TomCat的欢迎页面,但想要进入某一个静态的jsp页面显示找 ...
- 利用Java Service Wrapper将java项目添加到windows服务中
1.web项目,即tomcat/resin添加至window系统服务,步骤如下:第一步:找到tomcat的bin目录,如:D:\apache-tomcat-8.0.26\bin第二步:打开cmd,cd ...
- 部署java项目到服务器
1.首先判断服务器是什么系统 linux,windows 2.如果是linux使用SSH进行链接 3.如果是windows使用远程桌面进行链接 1.windows+R->mstsc进行远程桌面的 ...
随机推荐
- 如何修改Docker的默认网段?
背景 公司的服务器全部都是购买的阿里云ECS主机,默认内网网段为172.16.0.0/12,测试服上的服务基本都是使用Docker部署的. 之前的同事在该机器上安装的Docker全部都是默认配置,网段 ...
- C/C++面试题:C++与C有什么不同?
昨天,小编在一个讨论群里看到这样的对话 有人想要入学校编程俱乐部,面试时,学长问了她C++的区别,她没有答上来,就没有通过. 说到C和C++的区别,不只是进入学校社团有考核,出了学校,找工作面 ...
- jstack测试
1.RUNABLE 2.BLOCKED 3.WAITING/TIMED_WAITING Reference Handler线程与Finalizer线程,这两个线程用于虚拟机处理override了obj ...
- java导出excel并且压缩成zip上传到oss,并下载,使用字节流去存储,不用文件流保存文件到本地
最近项目上要求实现导出excel并根据条数做分割,然后将分割后的多个excel打包成压缩包上传到oss服务器上,然后提供下载方法,具体代码如下:这里只展示部分代码,获取数据的代码就不展示了 ByteA ...
- OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...
- 第6章 Python中的动态可执行方法目录
第6.1节 Python代码编译 第6.2节 Python特色的动态可执行方法简介 第6.3节 Python动态执行之动态编译的compile函数 第6.4节 Python动态表达式计算:eval函数 ...
- 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反
一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...
- PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项
老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...
- 从零开始的sql注入学习(挖坑不填)
首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...
- 2. Spring早期类型转换,基于PropertyEditor实现
青年时种下什么,老年时就收获什么.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https:// ...