2017-01-30 58 views
0

我想從NodeJS Docker容器連接到MongoDB Docker容器。我可以從RoboMongo等客戶端訪問MongoDb。Docker - Nodejs到Mongodb連接工作,但收集爲空

但在NodeJS中,它連接到數據庫,但數據庫爲空,並且在嘗試獲取集合時出現錯誤。

url = 'mongodb://127.0.0.1:27017/mydb'; 

router.get('/api/v1/test', function (req, res, next) { 

     MongoClient.connect(url, function(err, db) { 

      var collection = db.collection('myApptbl'); 

     }); 
}); 

我在泊塢窗日誌中看到下面的錯誤。

/usr/src/myapp/node_modules/mongodb/lib/mongo_client.js:225 
      throw err 
     ^

TypeError: Cannot read property 'collection' of null 

at /usr/src/myapp/server.js:52:26 
    at connectCallback (/usr/src/app/node_modules/mongodb/lib/mongo_client.js:315:5) 
    at /usr/src/myapp/node_modules/mongodb/lib/mongo_client.js:222:11 
    at _combinedTickCallback (internal/process/next_tick.js:67:7) 
    at process._tickCallback (internal/process/next_tick.js:98:9) 

您可以請幫忙或提供建議,爲什麼我得到這個錯誤。

+0

mongodb和nodejs是否在同一容器內運行? –

回答

2

您的連接字符串mongodb://127.0.0.1:27017/mydb通過引用127.0.0.1(localhost)告訴您的NodeJS應用程序在同一個容器中連接到MongoDB。

您想告訴它連接到MongoDB容器,具體取決於您如何啓動MongoDB容器,類似mongodb://mongodb:27017/mydb

如果你已經開始用類似docker-compose你的容器,你應該能夠使用該服務的名稱:如果你不使用docker-compose和使用--link

... 

services: 

    mongodb: <--- you can use this in your connection string 
     image: xxx 

    your-node-app: 
     image: xxx 

,您需要引用連接字符串中鏈接的名稱。

例如,

docker run -d --name mongodb mongodb 

docker run -d --link mongodb:mongodb your-node-app 

注意:這樣做的原因是因爲碼頭工人將一個條目添加到您的/etc/hosts文件指向的服務名稱/鏈接名稱的鏈接容器的私有IP地址。