【问题标题】:Dockerized Mongodb refuses connection when accesed from other container从另一个容器访问时,Dockerized Mongodb 拒绝连接
【发布时间】:2019-04-06 04:35:31
【问题描述】:

我正在使用 docker-compose 运行 2 个图像:一个烧瓶网络服务器和一个 mongodb 数据库。

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

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

从容器化烧瓶应用程序中,我尝试同时连接到 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

【问题讨论】:

  • frontend 服务启动时,Mongo 数据库可能尚未启动。阅读此stackoverflow.com/questions/31746182/…,了解如何在mongo 服务启动后延迟frontend 服务启动。
  • 谢谢,但是有了“depends_on”,我保证在前端启动时 mongo 已经启动。无论如何,我在设置数据库配置的方式中发现了问题,所以它已经解决了。
  • depends_on 不保证mongo 数据库在frontend 启动时已准备好接受连接。它只保证启动顺序(mongo, then frontend):看一下文档中的示例(docs.docker.com/compose/compose-file/#/dependson#depends_on):depends_on does not wait for db and redis to be “ready” before starting web - only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.

标签: mongodb docker flask


【解决方案1】:

首先你需要像这样暴露端口 27017:

expose:
    - 27017

那么你必须将它链接到你的容器:

links:
    - mongodb:mongodb-host 

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

【讨论】:

  • 感谢您的回答,但我找到了问题所在。这是我设置数据库配置的方式,所以现在解决了。
【解决方案2】:

您通过在前端配置中添加 depends_onyml 文件中定义依赖项。技术上depends_on 根据documentation 表达对订单的依赖。但是,您需要的是一种通过 localhost 在两个容器之间进行通信的方法。

在通过现有配置编写默认行为时,应用程序和数据库可以通过主机名一起通信。例如,从前端您可以通过主机名monogo:27017 访问数据库,请查看此documentation 以获取更多详细信息。如果您通过localhost 在两个容器之间创建连接,您可能需要考虑在它们之间使用link

【讨论】:

  • 感谢您的回答。我已经通过它的主机名 mongo 访问了数据库。无论如何,我在设置数据库配置的方式中发现了问题,所以现在解决了。
猜你喜欢
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
相关资源
最近更新 更多