玩了docker后相信很多童鞋都会遇到一个问题,就是我们部署的应用的容器连不上另一个数据库容器
这个就好玩了,在我多方查看,查找资料问大佬的方式下,终于找到了解决方案
首先我们准备一个项目,这里我以springboot为例子
首先我们把你的项目打包一个war包出来,改后缀为.zip
然后上传到你的linux上面去
解压到你的临时数据卷挂载目录(解压用unzip工具,或者直接本地解压然后上传ROOT中)
好了,接下来就是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官方已经给我们想好了
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记住这个名字,等下还要用呢
把你的数据库连接配置改成这个这个连接名,然后以--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文件的方式,我没试,因为时间原因,同时也觉得麻烦,有空的童鞋们记几试试啊
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。