我是Docker的新手。我正在尝试创建一个MongoDB容器和一个NodeJS容器。我的文件看起来:
version: '2'
services:
backend:
image: node:5.11-onbuild
ports:
- "3001:3001"
volumes:
- .:/code
working_dir: "/code"
links:
- mongodb
mongodb:
image: mongo:3.3
expose:
- 27017
它应该运行npm install
,然后运行node .
。但是docker-compose up
最终使用[MongoError: connect ECONNREFUSED 127.0.0.1:27017]
,而命令node .
。我认为这是因为文件/etc/mongod.conf
中的bind_ip = 127.0.0.1
。是这样吗?
我在Win10系统上使用boot2docker。
我该如何解决这个问题,以便node可以连接到MongoDB?
5条答案
按热度按时间ss2ws0br1#
在后端应用中,连接到
mongodb:27017
而不是127.0.0.1:27017
。其中'mongodb'是docker-compose. yml中的 service 的名称。p1tboqfb2#
我最近遇到了类似的问题。我在win10下运行docker toolbox,这是它对我的工作方式:
1)我必须验证我的默认Docker机器使用的URL。这可以通过运行
docker-machine ls
命令来检查。它将列出可用的计算机:2)当运行mongodbimage时,指定端口Map
3)此时,有效的mongo url将如下所示
其中
192.168.99.100
是点1)中的默认机器URL希望它能帮助到某人。
xkftehaa3#
很有可能是的127.0.0.1指向mongodb容器内部的localhost *,因此无法从容器外部访问。绑定到0.0.0.0可能会起作用。
使用您在docker-compose.yml中指定的链接,您的后端容器应该能够通过
mongodb:27017
连接到mongo容器f45qwnt84#
你必须告诉容器使用它自己的IP地址而不是localhost。
例如,假设您使用
expressjs
生成了scaffold代码,则必须使用routes/index.js
编写其中
172.17.0.5
是$CONTAINER_IP
你可以通过
$ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
找到容器ip如果你还是看不懂的话可以看一下我的Docker NodeJS and MongoDB app
ctehm74n5#
我变了
mongodb://admin:admin@127.0.0.1:27017/admin
到
mongodb://admin:admin@mongo:27017/admin
而且很有效
谢谢你的回答https://stackoverflow.com/a/34711892/3841211