基本上就是标题所说的:我能够连接到本地 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;
最佳答案
从您的问题中不清楚您正在使用的 Docker 容器的配置是什么。有几种可能性:
- 两个 Docker 容器,一个运行 MongoDB 镜像,另一个运行您的应用程序,通过
--link
选项链接在一起。
假设您通过 --name
选项为 Mongo 容器命名,您应该能够通过容器名称访问 MongoDB:mongodb://{container name}: 27017/数据库
。
- 两个 Docker 容器未使用
--link
选项链接。
在这种情况下,您需要使用 -p
选项公开 Mongo 容器上的 MongoDB 端口,并向应用程序容器提供 Docker 主机的 IP 地址:mongodb ://{docker主机IP}:27017/database
。请注意,localhost
将不起作用,因为在应用程序容器内,localhost
将引用应用程序容器。您可以在应用程序的 /etc/hosts
中配置一个条目来为您的 Docker 主机命名。
- MongoDB 在容器中运行;在 Docker 主机(或其他服务器)上运行的应用程序。
这只是上面#2 的变体。同样,您需要公开端口并确保应用程序知道如何找到运行 MongoDB 容器的主机。在这种情况下,如果应用程序在 Docker 主机上运行,您可以使用localhost
。
关于node.js - 能够连接到本地 Docker 容器中运行的 MongoDB,但不能从另一个容器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45947040/