Docker – Nodejs到Mongodb连接工作,但收集为空

我正尝试从NodeJS Docker容器连接到MongoDB Docker容器。 我可以从RoboMongo这样的客户端访问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'); }); }); 

我在我的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) 

你可以请帮忙或提供build议,为什么我得到这个错误。

您的连接stringmongodb://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 

如果您没有使用--link docker-compose并正在使用--link ,则需要在连接string中引用该链接的名称。

例如,

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

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