2015-10-26 62 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; 
});