能够在本地连接到在Docker容器中运行的MongoDB,但不能从另一个容器连接

时间:2017-08-29 19:33:40

标签: node.js mongodb docker

基本上标题是:我能够连接到本地运行在Docker容器中的MongoDB数据库,但是我无法在另一个Docker容器中这样做。我收到错误“MongoError:无法连接到服务器{服务器地址}:第一次连接时27017”

这是我的配置文件:

const mongoose = require('mongoose');
mongoose.Promise = global.Promise

let mongoURI = {
  development: 'mongodb://{server address}:27017/database,
}

const db = mongoose.connect(mongoURI.development, function(err, res) {
  if(err) {
    console.log('Error connecting to the database. ' + err);
  } else {
    console.log('Connected to Database: ' + mongoURI.development);
  }
});

module.exports = db;

2 个答案:

答案 0 :(得分:0)

从您的问题中不清楚您正在使用哪种Docker容器配置。有几种可能性:

  1. 两个Docker容器,一个运行MongoDB映像,另一个运行应用程序,通过--link选项链接在一起。
  2. 假设您通过--name选项为Mongo容器命名,您应该能够通过容器名称mongodb://{container name}:27017/database访问MongoDB。

    1. 两个Docker容器未与--link选项链接。
    2. 在这种情况下,您需要使用-p选项公开Mongo容器上的MongoDB端口,并为应用程序容器提供Docker主机的IP地址:mongodb://{docker host IP}:27017/database。请注意,localhost 会起作用,因为在您的应用程序容器localhost中将引用应用程序容器。您可以在应用程序的/etc/hosts中配置一个条目,为您的Docker主机命名。

      1. MongoDB在容器中运行;在Docker主机(或其他服务器)上运行的应用程序。
      2. 这只是上面#2的变体。同样,您需要公开端口并确保应用程序知道如何查找运行MongoDB容器的主机。在这种情况下,如果应用程序在Docker主机上运行,​​可以使用localhost

答案 1 :(得分:0)

解决了这个问题,我之前应该已经指定了这个:我的配置是没有与--link选项链接的两个容器,并暴露了MongoDB端口。问题是我的公司使用代理,并且当连接到我们域上运行的服务器时,我没有正确地禁用它。