基本上标题是:我能够连接到本地运行在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;
答案 0 :(得分:0)
从您的问题中不清楚您正在使用哪种Docker容器配置。有几种可能性:
--link
选项链接在一起。假设您通过--name
选项为Mongo容器命名,您应该能够通过容器名称mongodb://{container name}:27017/database
访问MongoDB。
--link
选项链接。在这种情况下,您需要使用-p
选项公开Mongo容器上的MongoDB端口,并为应用程序容器提供Docker主机的IP地址:mongodb://{docker host IP}:27017/database
。请注意,localhost
不会起作用,因为在您的应用程序容器localhost
中将引用应用程序容器。您可以在应用程序的/etc/hosts
中配置一个条目,为您的Docker主机命名。
这只是上面#2的变体。同样,您需要公开端口并确保应用程序知道如何查找运行MongoDB容器的主机。在这种情况下,如果应用程序在Docker主机上运行,可以使用localhost
。
答案 1 :(得分:0)
解决了这个问题,我之前应该已经指定了这个:我的配置是没有与--link选项链接的两个容器,并暴露了MongoDB端口。问题是我的公司使用代理,并且当连接到我们域上运行的服务器时,我没有正确地禁用它。