Docker mongo 来自其他容器的图像 'Connection refused'
Docker mongo image 'Connection refused' from other container
我是 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
如何解决这个问题,以便节点可以连接到 MongoDB?
很有可能,是的。 127.0.0.1 指向 localhost inside mongodb 容器,因此无法从容器外部访问。绑定到 0.0.0.0 可能会起作用。
使用您在 docker-compose.yml 中指定的 link,您的后端容器应该能够通过 mongodb:27017
[=11 连接到 mongo 容器=]
在您的后端应用中,连接到 mongodb:27017
而不是 127.0.0.1:27017
。其中 'mongodb' 是 service 在 docker-compose.yml.
中的名称
你必须告诉容器使用它自己的 IP 地址而不是本地主机。
例如,假设您使用 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 and MongoDB app
我最近遇到了类似的问题。我是 运行 docker Win 10 下的工具箱,这对我来说是这样的:
1) 我必须验证 URL 我的默认 docker 机器正在使用哪个。这可以通过 运行 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
希望对大家有所帮助。
我是 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
如何解决这个问题,以便节点可以连接到 MongoDB?
很有可能,是的。 127.0.0.1 指向 localhost inside mongodb 容器,因此无法从容器外部访问。绑定到 0.0.0.0 可能会起作用。
使用您在 docker-compose.yml 中指定的 link,您的后端容器应该能够通过 mongodb:27017
[=11 连接到 mongo 容器=]
在您的后端应用中,连接到 mongodb:27017
而不是 127.0.0.1:27017
。其中 'mongodb' 是 service 在 docker-compose.yml.
你必须告诉容器使用它自己的 IP 地址而不是本地主机。
例如,假设您使用 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 and MongoDB app
我最近遇到了类似的问题。我是 运行 docker Win 10 下的工具箱,这对我来说是这样的:
1) 我必须验证 URL 我的默认 docker 机器正在使用哪个。这可以通过 运行 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)
希望对大家有所帮助。