Docker - Nodejs与Mongodb连接有效但集合为空

时间:2017-01-30 04:28:21

标签: node.js mongodb docker

我正在尝试从NodeJS Docker容器连接到MongoDB Docker容器。我可以从RoboMongo等客户端访问MongoDb。

但是在NodeJS中,它连接到数据库,但db为null,我在尝试获取集合时遇到错误。

 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');   

       });
});

我在docker日志中收到以下错误。

/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)

您能否提供帮助或提供有关我收到此错误的原因的建议。

1 个答案:

答案 0 :(得分:3)

您的连接字符串mongodb://127.0.0.1:27017/mydb通过引用127.0.0.1(localhost)告诉您的NodeJS应用程序连接到同一容器中的MongoDB。

您希望告诉它连接到MongoDB容器,具体取决于您启动MongoDB容器的方式,使用类似mongodb://mongodb:27017/mydb的内容。

如果您使用docker-compose之类的容器启动容器,则应该能够使用服务名称:

...

services:

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

    your-node-app:
        image: xxx

如果您未使用docker-compose并且正在使用--link,则需要在连接字符串中引用该链接的名称。

如,

docker run -d --name mongodb mongodb

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

注意:原因是因为docker会在/etc/hosts文件中添加一个条目,将服务名称/链接名称指向链接容器的私有IP地址。< / p>