繁体   English   中英

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

[英]Able to connect to MongoDB running in a Docker container locally, but not from another container

标题基本上是这样的:我可以连接到本地在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. 通过--link选项将两个Docker容器链接在一起,其中一个运行MongoDB映像,另一个运行您的应用程序。

假设您通过--name选项为Mongo容器命名,那么您应该能够通过容器名称mongodb://{container name}:27017/database访问MongoDB。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM