Подключение к контейнеру докер-монго от хозяина

Я запускаю Docker на OS X с помощью:

docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod

и используя ip, я получаю от:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid>

в

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://<ip>:27017';

MongoClient.connect(url, function(err, db) {
   assert.equal(null, err);
   db.close();
});

и я получаю сообщение об ошибке.

Я использую официальный репозиторий mongo из Docker Hub. Есть ли какая-либо дополнительная настройка, которую мне нужно сделать для подключения к хосту?

Ответ 1

Выполняется ли код node.js из контейнера или из хоста?

Если это на хосте, просто используйте адрес localhost i.e:

var url = 'mongodb://localhost:27017';

Это будет работать, потому что вы опубликовали порт с -p 27017:27017.

Если код запущен внутри контейнера, лучше всего переписать его для использования ссылок и обращения к контейнеру mongo по имени, например:

var url = 'mongodb://mongo:27017';

Затем, когда вы запускаете контейнер с кодом node.js, вы можете просто сделать что-то вроде:

docker run -d --link mongo:mongo my_container

Затем Docker добавит запись в /etc/hosts внутри контейнера, чтобы имя mongo разрешало IP-адрес контейнера mongo.

Ответ 2

Если вы используете определенную пользователем сеть, вы сможете ее забрать, не связывая или не указывая 27017

const MONGO_NAME_STR = "mongodb://" + "your_docker_container_name";
var db = {};

mongo_client.connect(MONGO_NAME_STR, function(err, _db){
  //some err handling
  db = _db;
});

Ответ 3

Еще один вариант для тех, кто использует docker-compose

version: '3.1'
services:
  mongo:
    image: mongo
    container_name: "mongo"
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    volumes:
      - './dockervolume/mongodb:/data/db'
    ports:
      - 27017:27017

И вы можете подключиться с помощью строки URL

    MongoClient.connect("mongodb://root:[email protected]:27017")
        .then(()=>{
            console.log("db connect success");
        })
        .catch((err)=>{
            throw err
        });