本以为很简单,由于没用过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中的更多相关文章

  1. 项目案例之Pipeline流水线发布JAVA项目(三)

    项目案例之Pipeline流水线发布JAVA项目(三) 链接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取码:z7gj 复制这段内容后打开百度网 ...

  2. Centos 如何 发布Java项目

    在发布Java项目之前,我们先要安装如下软件 一.Windows 1.winscp(Windows到centos上传下载) 2.PuTTY(Windows访问centos服务器) 3.Navicat客 ...

  3. 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目

    jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...

  4. spring boot (2):spring boot 打包tomcat、tomcat 部署多个项目、服务器部署项目SSL 设置(阿里云)

    一.spring boot 内置tomcat配置https: 关于自签名证书可以看下上一篇 spring boot1 更详细的可以看转载 https://www.jianshu.com/p/8d4ab ...

  5. 【图文】 使用ant编译和发布java项目

        开发JavaEE项目经常会碰到修改代码后,项目没有重新编译的问题.老大给指明了一个解决办法:用ant编译项目. ant是apache基金会下的一个项目,是基于Java语言的构建工具.      ...

  6. Dockerfile创建tomcat和jdk,并发布java项目

    1.准备好需要的jdk 和 tomcat kun@ubuntu:~$ cd tomcat-docker/ kun@ubuntu:~/tomcat-docker$ ll total drwxrwxr-x ...

  7. 在CentOS(Linux)下用TomCat部署完java项目后,在Windows下可以访问8080,但无法通过输入页面名.jsp进入页面

    错误描述:今天第一次在linux下部署项目,写了个测试的项目,在CentOS下放行8080端口后,在Windows下可以访问8080,出现TomCat的欢迎页面,但想要进入某一个静态的jsp页面显示找 ...

  8. 利用Java Service Wrapper将java项目添加到windows服务中

    1.web项目,即tomcat/resin添加至window系统服务,步骤如下:第一步:找到tomcat的bin目录,如:D:\apache-tomcat-8.0.26\bin第二步:打开cmd,cd ...

  9. 部署java项目到服务器

    1.首先判断服务器是什么系统 linux,windows 2.如果是linux使用SSH进行链接 3.如果是windows使用远程桌面进行链接 1.windows+R->mstsc进行远程桌面的 ...

随机推荐

  1. 03Python网络编程系列之服务端

    # 这里边是一个定义了服务端的一系列函数,是Python网络编程这本书第七章的第一个例子.# 这是供后边函数进行调用了,然后我们来进行研究网络的单线程编程,多线程编程.异步网络编程等.# 导入网络编程 ...

  2. MySQL——事务ACID&隔离级别

    数据库事务ACID&隔离级别 什么是事务 事务是用户定义的一个数据库操作序列.这些操作要么全执行,要么全不执行,是一个不可分割的工作单元.在关系型数据库中,事务可以是一条SQL语句,也可以是一 ...

  3. 记一次MySQL出现Waiting for table metadata lock的原因、排查过程与解决方法

    任务背景:将sql文件通过shell直接导入到mysql中执行(还原) bug表现:导入后java项目卡死 过程: 1.网上乱搜一通,无意间看到一篇文章,这篇文章说明了如何开启mysql的genera ...

  4. 整理一下《java并发编程实战》中的知识点

    分工.同步.互斥的历史由来 分工:单道.多道.分时 同步:线程通信(组织编排任务) 互斥:因(多线程访问共享资源)果(串行化共享资源的访问) 1切都是为了提高性能 2.可见性.原子性.有序性 可见性: ...

  5. Python基础教程目录

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python部分代码样例 老猿Python重难点知识博文汇总 老猿Python博客地址 第1章 Python学习环境构建目 ...

  6. 第二十五章、containers容器类部件GroupBox分组框详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  7. 转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系

    代码页是字符集编码的别名,也有人称"内码表".早期,代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称.当时通用的操作系统都是命令行界面系统,这些操作系统直接使用BIOS供应 ...

  8. 问题:PyCharm调试方法Force run to cursor与run to cursor的区别

    Force run to cursor与run to cursor的差别是,后者在执行到光标的代码行前,如果有代码中设置了断点,会在该断点处暂停,等待进一步调试指令,而Force run to cur ...

  9. DVWA SQL Injection High

    High 虽然是high等级,但是通过源码审计发现与low等级一样,没有对传入的值做任何过滤,唯一不同的就是点击连接后打开了另外一个对话框,用户在新打开的页面输入 其余的步骤与low级别的一样:htt ...

  10. 学习笔记:舞蹈链 Dancing Links

    这是一种奇妙的算法用来解决两个问题: 精确覆盖问题:给定一个矩阵,每行是一个二进制数,选出尽量少的行,使得每一列恰好有一个 \(1\) 重复覆盖问题:给定一个矩阵,每行是一个二进制数,选出尽量少的行, ...