0101tomcat部署war访问mysql失败-容器间通信-docker项目部署

一、简介

最近参与开发一个项目,其中一部分系统需要迁移。从阿里云迁移到实体服务器,使用docker部署。系统使用Java语言开发,springboot单体应用,另外需要单独部署的服务为mysql和redis。环境如下:

软件版本描述
springboot2.5.14Java web开发脚手架
mysql5.7.36关系型数据库
redis6.2.6内存数据库
tomcat8.5.xweb服务器
jdk1.8java开发工具集

二、部署

1、mysql数据迁移

这个没什么好说的,直接备份数据库,导入数据库即可。docer部署mysql可以参考下面链接1.

2、docker部署redis

redis单节点,拉取镜像,运行容器即可

docker run -d --name redis -p 6379:6379 redis

暂时不需要配置优化参数啥的

3、docker部署tomcat并运行war包

可以通过打镜像的方式吧war包放置在tomcat /usr/local/tomcat/webapps下面,或者运行tomcat容器后,通过命令拷贝至该目录下。我这里用的docker桌面版,直接运行容器,上传war包。

运行tomcat容器

docker run -d --name tomcat-competition -p 8080:8080 tomcat:8.5.100-jdk8-temurin-jammy

上传war包

在这里插入图片描述

上传war包后自动解压为对应名称的文件夹,内容同工具jd-gui看到的一样。

三、报错

查看tomcat日志,报错内容如下:

2024-04-13 10:21:35 02:21:35.302 [localhost-startStop-1] ERROR c.a.d.p.DruidDataSource - [init,931] - init datasource error, url: jdbc:mysql://127.0.0.1:3306/xxxxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
2024-04-13 10:21:35 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
  • xxxx:数据库名称

四、解决

1 分析

我服务要访问mysql 但是配置的地址为127.0.0.1 即本机地址,但是我们知道docker容器网络运行在docker网络虚拟网卡上。我的tomcat-competition容器访问不到msyql5.7这个容器中mysql的。方案有两种,

  • 方案1:查看容器在docker网络中ip地址,配置改为相应的地址
  • 方案2:自定义docker网络,把相关容器放置在该自定义网络中,通过容器名访问。

因为给容器分配ip地址是动态的,每次启动可能ip地址会变,所以不建议用方案1。我们使用方案2。

2 解决

步骤一:创建自定义网络

docker network create --driver bridge common-net

步骤二:把相关容器加入该网络

docker network connect common-net mysql5.7
docker network connect common-net redis
docker network connect common-net tomcat-competition

步骤三:把msyql和redis配置中的host改为相应的容器名,重新打war包,重新上传至tomcat,重启容器。

现在容器间可正常通信。

关于docker容器通信内容,参考下面链接2

结语

欢迎小伙伴一起学习交流,需要啥工具或者有啥问题随时联系我。

❓QQ:806797785

⭐️源代码地址:https://github.com/gaogzhen/

[1]0101docker mysql8镜像主从复制-运维-mysql[CP/OL]

[2]Docker 网络模式详解及容器间网络通信[CP/OL]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值