Docker容器间的通讯

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

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

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

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

然后上传到你的linux上面去

《Docker容器间的通讯》

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

《Docker容器间的通讯》

好了,接下来就是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 将宿主机的目录挂载到容器中去启动,和替换差不多的意思

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

《Docker容器间的通讯》

没错,就是这样子,然后我们排除下这问题
由于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记住这个名字,等下还要用呢

《Docker容器间的通讯》

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

《Docker容器间的通讯》

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

    原文作者:兰州
    原文地址: https://segmentfault.com/a/1190000017153629
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞