node.js - 从主机连接到 mongo docker 容器

标签 node.js macos mongodb docker

我在 OS X 上运行 Docker:

docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod

并使用我获得的 ip:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid>

在:

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://<ip>:27017';

MongoClient.connect(url, function(err, db) {
   assert.equal(null, err);
   db.close();
});

我收到超时错误。

我正在使用来自 Docker Hub 的官方 mongo 存储库。为了从主机连接,我需要做任何其他设置吗?

最佳答案

node.js 代码是从容器运行还是从主机运行?

如果它在主机上,只需使用本地主机地址,即:

var url = 'mongodb://localhost:27017';

这将起作用,因为您使用 -p 27017:27017 发布了端口。

如果代码在容器内运行,最好重写它以使用链接并通过名称引用 mongo 容器,例如:

var url = 'mongodb://mongo:27017';

然后,当您使用 Node.js 代码启动容器时,您可以执行以下操作:

docker run -d --link mongo:mongo my_container

Docker 随后会在容器内的 /etc/hosts 中添加一个条目,以便名称 mongo 解析为 mongo 容器的 IP。

关于node.js - 从主机连接到 mongo docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336773/

相关文章:

javascript - 我可以在 chrome devtools 中执行 nodejs javascript 脚本吗?

swift - 在 ViewController 中处理菜单项操作

c++ - 构建简单 MongoDB C++ 客户端示例时出错

angularjs - 当我将数据保存到 mongoDB 时,如何在我的代码中获取 _id 值

javascript - 如何使用 Angularjs 和 NodeJs 在 ckeditor 中上传图像

windows - 在 Windows 上发送数据报时出现 EACCES 错误

objective-c - 按修改日期降序获取文件夹顺序中的文件列表

objective-c - 如何阻止 NSSavePanel 在完成 block 后关闭?

javascript - 如何使用 Express、Mongoskin 和 Node.js 查找 mongoDB 对象

java - 数据从mongoDB到java