2015-10-26 25 views
9

我在OS X上运行的码头工人与蒙戈搬运工容器:连接到从主

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仓库。是否有任何额外的设置需要我从主机进行连接?

回答

20

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

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

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

这工作,因为你与-p 27017:27017公布的端口。当您使用节点启动容器

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

然后:

如果代码是一个容器中运行,这将是最好重写它使用链接和名称,如参照蒙戈容器。 JS代码,你可以这样做:

docker run -d --link mongo:mongo my_container 

码头工人随后将容器内的条目添加到/etc/hosts以便名称mongo解析为蒙戈容器的IP。

+0

我是从主机上运行它。当我将它更改为本地主机时,我得到的连接被拒绝。 – ggeise

+0

你确定mongo容器仍在运行吗?看一下'docker ps'。我刚刚测试过,它立即崩溃,对我来说日记错误 - 我不得不通过'--smallfiles'参数让它开始。 –

+0

是的,这是为我而存在。我试图把我的程序放入一个容器中,并且它与链接语法连接得很好。 – ggeise

0

如果你使用一个用户定义的网络,你应该能够把它捡起来不链接或指定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; 
});