Изображение Docker mongo "Соединение отказалось" от другого контейнера

Я новичок в докере. Я пытаюсь создать контейнер 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. Это правильно?

Я использую boot2docker в системе Win10.

Как я могу решить эту проблему, чтобы узел мог подключиться к MongoDB?

Ответ 1

В своем backend-приложении подключитесь к mongodb:27017 вместо 127.0.0.1:27017. Где "mongodb" - это имя вашего контейнера в файле docker-compose.yml.

Ответ 2

Скорее всего, да. 127.0.0.1 указывает на localhost внутри контейнера mongodb, поэтому он недоступен извне контейнера. Вероятно, привязка к 0.0.0.0 будет работать.

С ссылкой, указанной вами в файле docker-compose.yml, ваш бэкэнд-контейнер должен затем подключиться к контейнеру mongodb:27017 через mongodb:27017

Ответ 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 inspect $CONTAINER_HOSTNAME | grep IPAddress

Если вы все еще не можете понять, вы можете заглянуть в мое приложение Docker NodeJS и MongoDB

Ответ 4

Я недавно столкнулся с подобной проблемой. Я запускаю docker toolbox под win 10, и вот как это сработало для меня:

1) Я должен был проверить, какой 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) В этот момент действительный URL-адрес монго будет выглядеть примерно так

var dbhost = 'mongodb://192.168.99.100:27017/test

где 192.168.99.100 был машинным URL-адресом по умолчанию из точки 1)

Надеюсь, это поможет кому-то.