Docker如何通过Container中的Web Service连接到MongoDB

目前我想设置一个Linux服务器与MongoDB和一个Web服务器,保存在这个数据库内的东西。 我需要它们都在Docker容器中运行。

我的问题是,我的WebServer似乎不能从它的容器内“查看”MongoDB。

目前为止尝试的是:使用MongoDB运行

docker运行-p 27017:27017 -v … repoimage

它初始化好,我可以通过mongoshell访问这个数据库没有任何问题。 如果Web服务器DOESNT运行在容器中,但是只能作为Java应用程序在主机上运行,​​Web服务器也可以访问数据库。

当我尝试通过一个容器运行服务器时,我得到一个javaexception,说“连接被拒绝”(当他不能打开套接字时抛出)

(重要提示:服务器通过“localhost”访问MongoDB)

我认为集装箱networking“联系在一起”。 有没有人有同样的问题?

本地主机将由容器中的主机文件parsing,因此它不会指向容器之外的主机localhost。 用–net =“host”运行容器来解决。

另外,我build议用docker-compose启动这两个容器,以便拥有自己的networking,并通过自己的哈希在主机文件中相互引用。

https://docs.docker.com/compose/networking/#configuring-the-default-network

试着将Web服务器指向正确的容器IP。 您可以使用此命令获取容器IP

docker inspect <container-uid> | grep IPAddress docker inspect <container-uid> | grep IPAddress

我相信第一个容器的默认IP是172.17.0.2。 这样您的Web服务器将指向MongoDB运行的容器而不是本地主机。