Node / Express应用程序无法连接到docker mongodb

我想运行一个使用express的节点应用程序,并连接到(boot2docker)docker mongo容器。

当我第一次写应用程序时,我使用了一个本地安装的mongodb实例,下面的configuration工作:

module.exports = { env: 'development', mongo: { uri: 'mongodb://localhost/fullstack-dev' } }; 

它按预期运行。

现在我正试图把这个换成mongo的docker实例。

所以,我已经完成了以下步骤来让mongo运行:

 $ docker pull mongo:latest $ docker run -v "$(pwd)":/data --name mongo -d mongo mongod --smallfiles $ docker ps #my mongo instance is 442c2541fe1a $ docker exec -it 442c2541fe1a bash $ mongo 

在这一点上,似乎在我的命令提示符下运行。

然后,我试图获取在osx上运行docker的boot2docker vm的IP:

 $ boot2docker ip # the IP returned: 192.168.59.103 

那么,我就把nodejsconfiguration中的旧的mongodbpath换成了以下内容:

 module.exports = { env: 'development', mongo: { uri: 'mongodb://192.168.59.103:27017/fullstack-dev' } }; 

当我运行应用程序,我得到一个连接错误。

 events.js:72 throw er; // Unhandled 'error' event ^ Error: failed to connect to [192.168.59.103:27017] 

什么是适当的configuration连接我的MEAN堆栈应用程序与docker'ified mongodb实例?

您需要使用-p参数在容器上发布适当的端口,例如:

 docker run -p 27017:27017 -v "$(pwd)":/data --name mongo -d mongo mongod --smallfiles 

这将使主机(你的情况下的虚拟机)访问端口27017并转发stream量到容器上的端口27017。