Docker容器间的通讯

本文详细介绍了解决Docker容器间通信问题的方法,通过使用--link命令和修改数据库连接配置,实现在不同容器间的SpringBoot应用与数据库容器的正常通信。同时提供了启动多个容器并进行连接的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

玩了docker后相信很多童鞋都会遇到一个问题,就是我们部署的应用的容器连不上另一个数据库容器

这个就好玩了,在我多方查看,查找资料问大佬的方式下,终于找到了解决方案

首先我们准备一个项目,这里我以springboot为例子

首先我们把你的项目打包一个war包出来,改后缀为.zip

然后上传到你的linux上面去

6193

解压到你的临时数据卷挂载目录(解压用unzip工具,或者直接本地解压然后上传ROOT中)

6200

好了,接下来就是linux命令操作了

先把你的数据库挂起来

docker run -d -p 3306:3306 --name mysql mysql:5.7.24

(数据表啥的自己搞,我另一篇文章里面有写怎么加载数据卷实现数据库的数据持久化的)

以挂载卷的形式启动你的tomcat

docker run -d -p 8080:8080 
--name sbv /usr/local/docker/tomcat/ROOT/:/usr/local/tomcat/webapps/ROOT 
tomcat

run 启动
-d 放进后台
-p 8080:8080 将宿主机的8080端口映射到容器的8080端口(左宿右容)
--name 给你启动的容器起个名字,我这里是sbv
--v 将宿主机的目录挂载到容器中去启动,和替换差不多的意思

跑起来了,是吧,你上你的应用访问下试试
我这边是报错了

6246

没错,就是这样子,然后我们排除下这问题
由于docker是沙箱机制的,所以我们可以认为容器内部是独立的一个系统,不能连接到外部的网络

那么怎么解决呢??

莫担心,docker官方已经给我们想好了
https://docs.oracle.com/cd/E3...

--link 父容器:当前连接名 -v

因此我们只需要用--link命令指定一个父容器即可

这里的话我们可以这样写

docker run -d -p 8080:8080 \
--name sbv \
--link mysql:tomysql \
-v /usr/local/docker/tomcat/ROOT/:/usr/local/tomcat/webapps/ROOT \
tomcat

注意我这边的父容器也就是我的数据库名字是mysql,然后当前连接名字是tomysql记住这个名字,等下还要用呢

6279

把你的数据库连接配置改成这个这个连接名,然后以--link的方式启动即可访问数据库了

当然你可以连接多个容器来启动你的app

docker run -d \
-p 8080:8080 \
--name sbv \
--link mysql:tomysql -v \
--link redis:toredis \
-v /usr/local/docker/tomcat/ROOT/:/usr/local/tomcat/webapps/ROOT \
tomcat

6306

另一个方案是改host文件的方式,我没试,因为时间原因,同时也觉得麻烦,有空的童鞋们记几试试啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值