停靠的Mongodb在从其他容器访问时拒绝连接
我正在使用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撰写文件:停靠的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:
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访问了数据库。无论如何,我在设置数据库配置的过程中发现了问题,所以现在就解决了。