Node.js 能够本地连接到Docker容器中运行的MongoDB,但不能从另一个容器连接
基本上正如标题所说:我可以在本地连接到Docker容器中运行的MongoDB数据库,但无法从另一个Docker容器中连接。我收到错误“MongoError:未能在第一次连接时连接到服务器{server address}:27017” 这是我的配置文件: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
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容器的配置。有两种可能性:
--link
选项链接在一起--name
选项为Mongo容器命名,那么您应该能够通过容器名:MongoDB://{container name}:27017/数据库
访问MongoDB
--link
选项链接的两个Docker容器-p
选项公开Mongo容器上的MongoDB端口,并为应用程序容器提供Docker主机的IP地址:MongoDB://{Docker主机IP}:27017/数据库
。请注意,localhost
将不起作用,因为在应用程序容器中,localhost
将引用应用程序容器。您可以在应用程序的/etc/hosts
中配置一个条目,为Docker主机命名
这只是上面#2的一个变体。同样,您需要公开端口,并确保应用程序知道如何找到运行MongoDB容器的主机。在这种情况下,如果应用程序在Docker主机上运行,您可以使用
localhost
。解决了这个问题,我应该早一点指定:我的配置是两个容器没有链接--link选项,MongoDB端口暴露。问题是我的公司使用代理,而我在连接到我们域上运行的服务器时没有正确禁用代理。您是否已指定要在docker中公开的端口映射?