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

Node.js 能够本地连接到Docker容器中运行的MongoDB,但不能从另一个容器连接,node.js,mongodb,docker,Node.js,Mongodb,Docker,基本上正如标题所说:我可以在本地连接到Docker容器中运行的MongoDB数据库,但无法从另一个Docker容器中连接。我收到错误“MongoError:未能在第一次连接时连接到服务器{server address}:27017” 这是我的配置文件: const mongoose = require('mongoose'); mongoose.Promise = global.Promise let mongoURI = { development: 'mongodb://{server

基本上正如标题所说:我可以在本地连接到Docker容器中运行的MongoDB数据库,但无法从另一个Docker容器中连接。我收到错误“MongoError:未能在第一次连接时连接到服务器{server address}: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;

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

  • 两个Docker容器,一个运行MongoDB映像,另一个运行应用程序,通过
    --link
    选项链接在一起
  • 假设您通过
    --name
    选项为Mongo容器命名,那么您应该能够通过容器名:
    MongoDB://{container name}:27017/数据库
    访问MongoDB

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

  • 在容器中运行的MongoDB;在Docker主机(或其他服务器)上运行的应用程序

  • 这只是上面#2的一个变体。同样,您需要公开端口,并确保应用程序知道如何找到运行MongoDB容器的主机。在这种情况下,如果应用程序在Docker主机上运行,您可以使用
    localhost

    解决了这个问题,我应该早一点指定:我的配置是两个容器没有链接--link选项,MongoDB端口暴露。问题是我的公司使用代理,而我在连接到我们域上运行的服务器时没有正确禁用代理。

    您是否已指定要在docker中公开的端口映射?