您的当前位置:首页正文

Docker容器间的通讯

2024-11-28 来源:个人技术集锦

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

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

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

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

然后上传到你的linux上面去

好了,接下来就是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

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

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

那么怎么解决呢??

莫担心,docker官方已经给我们想好了

--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记住这个名字,等下还要用呢

把你的数据库连接配置改成这个这个连接名,然后以--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

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

显示全文