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

文章目录

    • 一、简介
    • 二、部署
      • 1、mysql数据迁移
      • 2、docker部署redis
      • 3、docker部署tomcat并运行war包
    • 三、报错
    • 四、解决
      • 1 分析
      • 2 解决
    • 结语

一、简介

最近参与开发一个项目,其中一部分系统需要迁移。从阿里云迁移到实体服务器,使用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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616134.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STK】手把手教你利用STK进行导弹和反导仿真03 - STK/MMT模块02 导弹飞行工具用户界面

MFT导弹飞行工具是MMT模块中的核心部分,它提供多级导弹飞行轨迹,易于在STK中分析和可视化。对于一个特定的导弹模型,可通过定义发射点和打击点及轨迹类型,生成飞行轨迹和飞行数据。 MFT提供代表多种导弹类型和性能参数的导弹数据库…

Windows server SMB服务 文件夹访问缓慢 解决方法

Windows server用了很久,一直有个问题没有解决,就是用手机访问SMB时,文件夹列出速度非常慢,今天去翻阅了一下官方文档,找到了解决办法。 更改注册表SMB服务的工作进程数 HKLM\System\CurrentControlSet\Control\Sessi…

使用Riverpod在Flutter中创建Todo列表

使用Riverpod在Flutter中创建Todo列表 视频 https://youtu.be/mlbeSD1KSIo https://www.bilibili.com/video/BV1jj42197c8/ 前言 原文 https://ducafecat.com/blog/flutter-todo-list-with-riverpod-guide-02 学习如何使用Riverpod在Flutter中构建一个功能完整的Todo列表应用…

MySQL前缀索引(3/16)

前缀索引 前缀索引:MySQL支持前缀索引,允许定义字符串的一部分作为索引。如果不指定前缀长度,索引将包含整个字符串。前缀索引可以节省空间,但可能会增加查询时的记录扫描次数(因为会查询到多个前缀相同的数据&#x…

动态规划原理及其在优化问题中的应用解析

动态规划原理及其在优化问题中的应用解析 一、最优子结构二、重叠子问题三、何时使用动态规划法四、伪代码示例五、C代码示例七、详细说明动态规划原理7.1、最优子结构7.2 重叠子问题7.3 动态规划的实现 八、结论 动态规划是一种解决优化问题的方法,它通过将原问题分…

JavaScript代码挑战

让我们回到朱莉娅和凯特关于狗的研究。这次,他们想把狗的年龄转换成人的年龄,并计算出研究中狗的平均年龄。 创建一个函数 “calcAverageHumanAge”,该函数接受一个狗的年龄数组(‘age’),并按顺序执行以下…

《黑马点评》Redis高并发项目实战笔记(上)P1~P45

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp,然后右键hmdp下的表,选择运行SQL文件,然后指定运行文件hmdp.sql即可(建议MySQL的版本在5.7及以上): 下面这…

Hidl 学习总结 2

1、Android apk 调用Hidl处理 app添加对应的hidl jar包 2、MainActivity 添加如下代码 package com.example.test2;import androidx.appcompat.app.AppCompatActivity; import vendor.hardware.test.V1_0.ITest; import vendor.hardware.test.V1_0.ITestCmdCallback; import …

Fence同步

在《Android图形显示系统》没有介绍到帧同步的相关概念,这里简单介绍补充一下。 在图形显示系统中,图形缓存GraphicBuffer可以被不同的硬件来访问,如CPU、GPU、HWC都可以对缓存进行读写,如果同时对图形缓存进行操作,有…

LeetCode最长有效括号问题解

给定一个仅包含字符的字符串(’ 和 ‘)’,返回最长有效的长度(出色地-形成) 括号子弦。 示例1: 输入:s “(()” 输出:2 说明:最长的有效括号子字符串是 “()” 。 示例2: 输入:s “)()())…

应该如何进行POC测试?—【DBA从入门到实践】第三期

在数据库选型过程中,为确保能够灵活应对数据规模的不断扩大和处理需求的日益复杂化,企业和技术人员会借助POC测试来评估不同数据库系统的性能。在测试过程中,性能、并发处理能力、存储成本以及高可用性等核心要素通常会成为大家关注的焦点&am…

单链表详解(无哨兵位),实现增删改查

1.顺序表对比单链表的缺点 中间或头部插入时,需要移动数据再插入,如果数据庞大会导致效率降低每次增容就需要申请空间,而且需要拷贝数据,释放旧空间增容造成浪费,因为一般都是以2倍增容 2.链表的基础知识 链表也是线…