来自其他容器的 Docker mongo 图像“连接被拒绝”
Posted
技术标签:
【中文标题】来自其他容器的 Docker mongo 图像“连接被拒绝”【英文标题】:Docker mongo image 'Connection refused' from other container 【发布时间】:2016-04-15 04:16:22 【问题描述】:我是 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?
【问题讨论】:
问题中的死链接,请考虑修复 plz @StepanYakovenko 谢谢。修好了。 这将对您有所帮助:use docker stack 【参考方案1】:在您的后端应用程序中,连接到 mongodb:27017
而不是 127.0.0.1:27017
。其中 'mongodb' 是您在 docker-compose.yml 中的 服务 的名称。
【讨论】:
嗯,我明白了。我们使用 docker 容器内的链接名称代替 IP。谢谢! 为有问题的其他人澄清。在您的节点应用程序中:mongoose.connect('mongodb://db:27017/whatever');
其中 'db' 是 docker-compose.yml 中容器的名称 - 即 depends_on: - db db: image: mongodb
@colby jax 正如你所提到的,我正在使用 mongoose.connect()。但是当我使用 docker-compose up 时出现错误
这给了我 ENOTFOUND mongodb mongodb:27017
@a_m_dev 它应该是 docker compose 服务名称。我修正了我的答案【参考方案2】:
我最近遇到了类似的问题。我在 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镜像时指定端口映射
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-machine
命令,但我设法使用docker inspect mongo
检查了我的mongo 映像的地址,其中mongo 是实例的名称
@Marcin 当我尝试使用我的 localdb 运行该应用程序时,我构建了一个图像(示例 nodejs 应用程序)。我收到了错误。我按照您的步骤进行操作.. docker run -d -it -p 27017:27017 mongo 这是为了运行 mongodb 我现在通过 docker run -d it -p 8088:8088 nitikishu/samplenodejs 运行 nodejs 应用程序想将 mongodb 与我的应用程序连接我应该运行什么命令在我的 docker ip 地址 192.168.99.100:8088 我的应用程序正在运行但 mongodb 在 localhost:27017 中无法运行,此消息正在显示。
并且您似乎正试图在本机驱动程序端口上通过 HTTP 访问 MongoDB。现在我该怎么办?使用哪个主机和命令将mongodb与应用程序连接
@Marcin var dbhost = 'mongodb://192.168.99.100:27017/test 会连接数据库吗?
我能够使用docker inspect mongo-container
命令找到我的mongo docker 的IPAddress
,并且使用IPAddress
它可以工作,但是node.js 代码需要有一些动态名称,而不是一些硬编码的IP。那么应该使用什么呢?我试过mongo-container-name
,没用【参考方案3】:
你必须告诉容器使用它自己的 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 and MongoDB app
【讨论】:
【参考方案4】:很可能,是的。 127.0.0.1 指向 localhost inside mongodb 容器,因此无法从容器外部访问。绑定到 0.0.0.0 可能会起作用。
使用您在 docker-compose.yml 中指定的链接,您的后端容器应该能够通过 mongodb:27017
连接到 mongo 容器
【讨论】:
以上是关于来自其他容器的 Docker mongo 图像“连接被拒绝”的主要内容,如果未能解决你的问题,请参考以下文章
Springboot 容器使用 docker-compose 连接到 mongo 容器的 503 错误代码
尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?