来自其他容器的Docker mongo镜像“Connection refused”

n6lpvg4x  于 2023-05-28  发布在  Docker
关注(0)|答案(5)|浏览(250)

我是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?

ss2ws0br

ss2ws0br1#

在后端应用中,连接到mongodb:27017而不是127.0.0.1:27017。其中'mongodb'是docker-compose. yml中的 service 的名称。

p1tboqfb

p1tboqfb2#

我最近遇到了类似的问题。我在win10下运行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)当运行mongodbimage时,指定端口Map

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
希望它能帮助到某人。

xkftehaa

xkftehaa3#

很有可能是的127.0.0.1指向mongodb容器内部的localhost *,因此无法从容器外部访问。绑定到0.0.0.0可能会起作用。
使用您在docker-compose.yml中指定的链接,您的后端容器应该能够通过mongodb:27017连接到mongo容器

f45qwnt8

f45qwnt84#

你必须告诉容器使用它自己的IP地址而不是localhost。
例如,假设您使用expressjs生成了scaffold代码,则必须使用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
你可以通过$ docker inspect $CONTAINER_HOSTNAME | grep IPAddress找到容器ip
如果你还是看不懂的话可以看一下我的Docker NodeJS and MongoDB app

ctehm74n

ctehm74n5#

我变了
mongodb://admin:admin@127.0.0.1:27017/admin

mongodb://admin:admin@mongo:27017/admin
而且很有效
谢谢你的回答https://stackoverflow.com/a/34711892/3841211

相关问题