我想运行一个使用express并连接到(boot2docker)docker mongo容器的节点应用程序。
当我第一次编写应用程序时,我使用的是本地安装的mongodb实例,并且以下配置有效:
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
因此,然后,我去掉了nodejs配置中的旧mongodb路径到以下内容:
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]
将我的MEAN堆栈应用程序与docker’ified mongodb实例连接的正确配置是什么?
您需要使用以下-p参数在容器上发布适当的端口:
-p
docker run -p 27017:27017 -v "$(pwd)":/data --name mongo -d mongo mongod --smallfiles
这将使主机(您的情况下为VM)上的端口27017可访问,并将流量转发到容器上的端口27017。