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

标签 node.js mongodb docker

基本上就是标题所说的:我能够连接到本地 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 容器的配置是什么。有几种可能性:

  1. 两个 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/

    相关文章:

    python - 如何从本地 Docker 容器中从 S3 中提取数据

    docker - 为什么 "go build"对我的 Docker 项目失败?

    javascript - Node.js/express部署到不同环境

    node.js - STRAPI 是否有助于开发 REST api 以轻松且经济有效地连接 Flutter 应用程序

    mongodb - pymongo 查询错误中的 upsert 和 arrayfilters - TypeError : upsert must be True or False

    node.js - 同步两个 MongoDB 集合

    docker - 如何连接到Docker容器内的localhost?

    mysql - 如何将服务器和应用程序分开

    node.js - Hastebin 服务器的 NPM 保持运行

    javascript - Babel 和 next.js - 如何在项目中构建、babel 和附加我自己的脚本