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地址的服务名称/链接名称。