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

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

这是我的configuration文件:

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容器的configuration。 有几种可能性:

  1. 两个Docker容器,一个运行MongoDB映像,另一个运行应用程序,通过--link选项链接在一起。

假设你通过--name选项给Mongo容器一个名字,你应该可以通过容器名称: mongodb://{container name}:27017/database来访问MongoDB。

  1. 两个Docker容器不与--link选项链接。

在这种情况下,您将需要使用-p选项公开MongoDB容器上的MongoDB端口,并向应用程序容器提供您的Docker主机的IP地址: mongodb://{docker host IP}:27017/database 。 请注意, localhost无法正常工作,因为在您的应用程序容器localhost将引用应用程序容器。 您可以在应用程序的/etc/hostsconfiguration一个条目,为Docker主机提供一个名称。

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

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

解决了它,我应该早些指出:我的configuration是两个容器没有链接 – 链接选项,并暴露了MongoDB端口。 问题是我的公司使用代理服务器,并且在连接到运行在我们域中的服务器时没有正确禁用它。