Dockerized Mongodb从其他容器访问时拒绝连接

时间:2019-04-06 04:35:31

标签: mongodb docker flask

我正在使用docker-compose运行2个图像:flask Web服务器和mongodb数据库。

如果我仅启动mongodb数据库容器(官方映像)并在本地运行flask应用程序,则它将正常工作(连接到localhost:27017)。我还可以使用图形界面MongodbCompass访问位于localhost:27017的mongodb。

但是当我使用2个服务启动docker-compose时,我的连接被拒绝:pymongo.errors.ServerSelectionTimeoutError:localhost:27017:[Errno 111]连接被拒绝

在容器化烧瓶应用程序中,我尝试同时连接到localhost:27017和mongo:27017(这是服务的名称),但均出现错误。使我发疯的是,在这种情况下,我仍然能够使用MongodbCompass连接到localhost:27017。

这是我的docker-compose文件:

version: '3'

services:

  mongo:
    image: mongo
    volumes:
      - /mnt/usb/data:/data/db
    ports:
      - 27017:27017

  frontend:
    build: frontend/.
    ports:
      - 80:8080
    depends_on:
      - mongo

2 个答案:

答案 0 :(得分:0)

首先,您需要像这样公开端口27017:

expose:
    - 27017

然后您必须将其链接到您的容器:

links:
    - mongodb:mongodb-host 

左一个是容器的名称,右一个是容器中的主机名。 您可以使用mongodb-host主机名访问容器中的mongo。

答案 1 :(得分:0)

您通过在前端配置中添加ymldepends_on文件中定义了依赖性。从技术上讲,depends_on表示对根据documentation的顺序的依赖性。但是,您需要的是一种在两个容器之间通过本地主机进行通信的方法。

通过现有配置来构成默认行为,应用程序和数据库可以通过主机名一起通信。例如,您可以从Frontend通过主机名monogo:27017到达数据库,请检查此documentation以获取更多详细信息。如果您希望通过localhost在两个容器之间创建连接,则可能需要考虑在它们之间使用link

相关问题