docker容器间的通信【连接MongoDB数据库】
官方文档参考地址1、docker官方文档 2、hub.docker中mongo镜像
最近全面转型在docker容器中进行开发,但开发时遇见以下问题——“数据库 将在哪里运行?安装在同一个容器中还是单独运行?” 一般来说,每个容器都应该做一件事,并且做好。针对上面遇到的问题,来解决docker多容器连接。【官方解释】
默认情况下,容器是独立运行的,并且对同一台机器上的其他进程或容器一无所知。那么,我们如何让一个容器与另一个容器通信呢?答案是网络(network)
接下来我们便准备容器之间需要的条件。
1、创建network
2、准备MongoDB数据库容器
如果想要本地连接docker下的mongodb数据库。可参考Docker连接MongoDB数据库。但现在是容器之间的通信,故需要以下配置。
创建容器
如果没有拉取mongo镜像,会自动拉取mongo镜像。
3、准备另一个容器用于连接MongoDB
本例中以python程序测试连接另一个容器的数据库。
创建一个容器
当然也可以使用 -v 将容器挂载到本地
设置容器自动启动,每次就不用手动启动数据库容器啦 (可选设置,看自己需求)
4、 测试
经过前3步两个容器之间已经能通信了。为了确保通信是否成功,我们需要验证一下。
使用vscode进入第三步创建的容器,新建一个test.py文件用来测试能否连接mongodb数据库。代码如下:
输出:
进入本地的客户端,可以看到数据以存到了数据库。如何连接本地数据库查看[docker连接本地数据库]
为什么test.py文件连接的容器的地址是172.24.0.1:27066,而本地连接docker中的数据库是localhost:27066呢?
其实在本节开始时就说了,容器之间是相互独立,想要容器之间相互通信,要建立网络(network),使两个容器可以相互通信。而此时网络的作用就相当于一个网关,起到两个容器之间通信。(网关可以自行百度,不做过多的介绍)。那如何查看网络(network)的网关呢?输入如下代码:
todo-mongo的详细信息,我们便可以查看网关的信息
而本地连接为什么又可以是localhost:27066呢?其实在我们第2步创建mongo容器时,对外的ip和端口是 0.0.0.0:27066,查看容器信息:
此时便可查看。当然,你不输localhost:27066也可以,你也可以输入127.0.0.2:27066也能本地连接docker容器,前提是端口号不能输错!!!!
5、结论
经过上面的步骤,即可实现容器之间的相互通信。当然也可使用docker-compose实现容器之间的通信,该方法本节中不做介绍,此外也可以参考docker的官方文档docker-compose。