我是码头工人的新手。我正在尝试创建一个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 .
结束。
我认为这是因为文件bind_ip = 127.0.0.1
中的/etc/mongod.conf
。这是对的吗?
我在Win10系统上使用boot2docker。
如何解决此问题,以便节点可以连接到MongoDB?
答案 0 :(得分:44)
在后端应用中,请连接到mongodb:27017
而不是127.0.0.1:27017
。其中'mongodb'是docker-compose.yml中容器的名称。
答案 1 :(得分:6)
我最近遇到过类似的问题。我在win 10下运行docker toolbox,这就是它对我有用的方式:
1)我必须验证我的默认docker机器正在使用哪个URL。可以通过运行docker-machine ls
命令来检查。它将列出可用的机器:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:1234 v17.06.0-ce
rancher-client - virtualbox Stopped Unknown
rancher-server - virtualbox Stopped Unknown
2)运行mongodb image时指定端口映射
docker run -d -it -p 27017:27017 mongo
3)此时,有效的mongo url看起来像这样
var dbhost = 'mongodb://192.168.99.100:27017/test
其中192.168.99.100
是点1)的默认机器URL
希望它有所帮助。
答案 2 :(得分:5)
很有可能,是的。 127.0.0.1指向
使用您在docker-compose.yml中指定的链接,您的后端容器应该能够通过mongodb:27017
答案 3 :(得分:4)
您必须告诉容器使用它自己的IP地址而不是localhost。
例如,我们假设您使用expressjs
生成了脚手架代码,您必须写入routes/index.js
var mongodb = require('mongodb');
router.get('/thelist', function(req, res){
// Get a Mongo client to work with the Mongo server
var MongoClient = mongodb.MongoClient;
// Define where the MongoDB server is
var url = 'mongodb://172.17.0.5:27017/dbname';
// Connect to the server
MongoClient.connect(url, function (err, db) {
.........
其中172.17.0.5
是$CONTAINER_IP
你可以找到容器ip via
$ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
如果您仍然无法理解,可以查看我的Docker NodeJS and MongoDB app