我正在尝试使用dokku在数字海洋上部署带有mongodb的Node.js应用程序。不幸的是,我有一些问题让节点应用程序连接到mongodb。
到目前为止我做了什么。 我在git repo中有一个node.js应用程序 1.在数字海洋中创建dokku实例(在ubuntu 14.04上运行) 2.我创建了一个dokku-mongodb-plugin(参见https://github.com/jeffutter/dokku-mongodb-plugin):在那里按照git clone等安装说明进行操作。 3.将我的应用程序推送到数字海洋服务器(git push -u production master) 4.尝试创建一个mongodb进程:(在服务器上):dokku mongodb:创建testapp(testapp是我的应用程序的名称) 5.运行我的应用程序:dokku运行testapp节点app.js
这会导致连接错误(在底部)
我测试过: dokku mongodb:list
并且它没有返回任何内容,这让我觉得插件可能存在问题?
否则,我怀疑这可能是因为mongodb在与标准localhost不同的ip /进程下运行。
无论如何,我不确定问题是什么。任何帮助将不胜感激。
干杯,迈克
vents.js:72 扔掉//未处理的错误'事件 ^ 错误:无法连接到[localhost:27017] 在null。 (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:546:74) 在emit(events.js:106:17) 在null。 (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:150:15) 在emit(events.js:98:17) 在Socket。 (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:533:10) 在Socket.emit(events.js:95:17) at net.js:440:14 at process._tickCallback(node.js:419:13)
答案 0 :(得分:6)
dokku mongodb插件为其mongodb docker容器使用RFC 1918专用网络地址。如本文How to get a Docker container's IP address from the host?所述,您可以从docker inspect获取地址。从docker ps获取dokku-mongodb容器的容器ID,然后使用该容器ID运行dokku inspect。
当你使用dokku mongodb时:link< app> <数据库>或者在创建数据库时指定应用程序名称,该数据库在应用程序的dokku配置中设置一系列mongodb环境变量,您可以通过运行dokku config< app>。
$ dokku config test
=== test config vars ===
NODE_ENV: test
MONGODB_DATABASE: "myapp-test-db-production"
MONGODB_HOST: "172.17.0.123"
MONGODB_PORT: "27017"
MONGODB_USERNAME: "test"
MONGODB_PASSWORD: "***********************"
MONGO_URL: "mongodb://test:**********************@172.17.0.123:27017/myapp-test-db-production"
您需要从mongodb连接代码中引用这些环境变量。在我的例子中,我使用的是meanjs.org模板,所以我将config / env / test.js中db的值设置为db:process.env.MONGO_URL,并使用dokku config:set添加了NODE_ENV = test。
'use strict';
module.exports = {
db: process.env.MONGO_URL,
// db: 'mongodb://localhost/mean-test',
< snip >