我是码头工人的新手.我正在尝试创建一个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?
在您的后端应用程序中,连接到mongodb:27017
而不是127.0.0.1:27017
.其中'mongodb'是docker-compose.yml中容器的名称.
我最近遇到类似的问题。我正在win 10下运行docker工具箱,这对我来说是这样的:
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映像时指定端口映射
docker run -d -it -p 27017:27017 mongo
3)届时,有效的mongo网址应如下所示:
var dbhost = 'mongodb://192.168.99.100:27017/test
192.168.99.100
从点1开始的默认机器URL 在哪里?
希望它可以帮助某人。
很有可能。127.0.0.1指向mongodb容器内部的localhost ,因此无法从容器外部访问。绑定到0.0.0.0可能会起作用。
通过您在docker-compose.yml中指定的链接,您的后端容器应该能够通过以下方式连接到mongo容器 mongodb:27017
您必须告诉容器使用它自己的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
$ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
如果您仍然不明白,可以看一下我的Docker NodeJS和MongoDB应用程序