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

一、简介

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

软件 版本 描述
springboot 2.5.14 Java web开发脚手架
mysql 5.7.36 关系型数据库
redis 6.2.6 内存数据库
tomcat 8.5.x web服务器
jdk 1.8 java开发工具集

二、部署

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]

相关推荐

  1. Tomcat部署war

    2024-04-14 11:26:02       41 阅读
  2. springboot项目war包,并且部署外部tomcat

    2024-04-14 11:26:02       40 阅读
  3. Docker 部署war

    2024-04-14 11:26:02       34 阅读
  4. tomcat 弱口令war远程部署

    2024-04-14 11:26:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 11:26:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 11:26:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 11:26:02       87 阅读
  4. Python语言-面向对象

    2024-04-14 11:26:02       96 阅读

热门阅读

  1. Gitea:开源的轻量级Git服务平台

    2024-04-14 11:26:02       44 阅读
  2. 细说php语法糖

    2024-04-14 11:26:02       40 阅读
  3. 蓝桥杯python组基础知识速学!!!!

    2024-04-14 11:26:02       114 阅读
  4. MySQL基础教程(第二部分)

    2024-04-14 11:26:02       47 阅读
  5. Mysql入门基础教程(第一部分)

    2024-04-14 11:26:02       36 阅读
  6. python 解析json

    2024-04-14 11:26:02       36 阅读