从主机连接到蒙戈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代码是从容器还是从主机运行?

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

 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可以parsing为mongo容器的IP。

如果您使用用户定义的networking,您应该能够在不链接或指定27017的情况下进行提取

 const MONGO_NAME_STR = "mongodb://" + "your_docker_container_name"; var db = {}; mongo_client.connect(MONGO_NAME_STR, function(err, _db){ //some err handling db = _db; });