停靠的Mongodb在从其他容器访问时拒绝连接

停靠的Mongodb在从其他容器访问时拒绝连接,mongodb,docker,flask,Mongodb,Docker,Flask,我正在使用docker compose运行两个映像:一个flask Web服务器和一个mongodb数据库 如果我只启动mongodb数据库容器(官方图像)并在本地运行flask应用程序,它就会工作(连接到localhost:27017)。我还可以通过图形界面MongodbCompass访问localhost:27017上的mongodb 但是当我启动docker compose和这两个服务时,我的连接被拒绝:pymongo.errors.ServerSelectionTimeoutError:

我正在使用docker compose运行两个映像:一个flask Web服务器和一个mongodb数据库

如果我只启动mongodb数据库容器(官方图像)并在本地运行flask应用程序,它就会工作(连接到localhost:27017)。我还可以通过图形界面MongodbCompass访问localhost:27017上的mongodb

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

在容器化flask应用程序中,我尝试连接localhost:27017和mongo:27017(这是服务的名称),但出现了错误。让我疯狂的是,在这种情况下,我仍然能够通过MongodbCompass连接到localhost:27017

这是我的docker撰写文件:

version: '3'

services:

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

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

首先,您需要公开端口27017,如下所示:

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

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

首先,您需要公开端口27017,如下所示:

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

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

您通过在前端配置中添加
依赖项,在
yml
文件中定义了依赖项。从技术上讲,
取决于
根据订单表达依赖关系。然而,您需要的是一种在两个容器之间通过localhost进行通信的方法


在现有配置的默认行为中,应用程序和数据库可以通过主机名进行通信。例如,您可以通过主机名从前端访问数据库
monogo:27017
,请检查此项以了解更多详细信息。如果您通过“代码>本地Loals来创建两个容器之间的连接,您可能需要考虑使用<代码>链接< /代码>它们之间< /p> < p>在前端配置中添加<代码> RexsSon < /COD>,在代码> YML文件中定义了依赖关系。从技术上讲,
取决于
根据订单表达依赖关系。然而,您需要的是一种在两个容器之间通过localhost进行通信的方法


在现有配置的默认行为中,应用程序和数据库可以通过主机名进行通信。例如,您可以通过主机名从前端访问数据库
monogo:27017
,请检查此项以了解更多详细信息。如果您通过“代码>本地Loals来创建两个容器之间的连接,您可能需要考虑使用<代码>链接< /代码>它们之间的< /p>当Mongo > <代码>前端>代码>服务开始时,数据库可能还没有上线。阅读此文,了解如何仅在
mongo
服务启动后才延迟
frontend
服务启动。谢谢,但有了“依赖”,我保证在frontends启动时mongo已启动。无论如何,我在设置数据库配置的过程中发现了问题,因此问题得以解决。
dependens\u on
不保证
mongo
数据库在
frontend
启动时准备好接受连接。它只保证启动顺序(
mongo
,然后是
frontend
):看看文档中的示例():
依赖于在启动web之前不等待db和redis“准备就绪”-只在它们启动之前。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题和解决策略的更多信息。
Mongo数据库在
frontend
服务启动时可能尚未启动。阅读此文,了解如何仅在
mongo
服务启动后才延迟
frontend
服务启动。谢谢,但有了“依赖”,我保证在frontends启动时mongo已启动。无论如何,我在设置数据库配置的过程中发现了问题,因此问题得以解决。
dependens\u on
不保证
mongo
数据库在
frontend
启动时准备好接受连接。它只保证启动顺序(
mongo
,然后是
frontend
):看看文档中的示例():
依赖于在启动web之前不等待db和redis“准备就绪”-只在它们启动之前。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息和解决策略。
谢谢您的回答,但我已经找到了问题所在。这是在我设置数据库配置的方式,所以现在解决了。谢谢你的回答,但我发现了问题。这是我设置数据库配置的方式,所以现在就解决了。谢谢你的回答。我已经通过其主机名mongo访问了数据库。不管怎样,我已经在设置数据库配置的过程中发现了问题,所以现在就解决了。谢谢你的回答。我已经通过其主机名mongo访问了数据库。无论如何,我在设置数据库配置的过程中发现了问题,所以现在就解决了。