Подключение кластера Docker mongo с моей локальной машины - PullRequest
2 голосов
/ 05 июня 2019

Я создал реплику mongodb в Docker на моей локальной машине. После настройки реплика работает, если я подключаюсь внутри контейнеров. Затем, когда я подключаю localhost: 30001,30002,30003 со своего компьютера, но вне контейнера, он говорит, что соединение не установлено, и выдается следующее сообщение об ошибке.

SERVER [node1:27017] (Type: UNKNOWN)
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node3

SERVER [node2:27017] (Type: UNKNOWN) 
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node2

SERVER [node1:27017] (Type: UNKNOWN) 
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node1

Вот мой файл docker-comopse

version: '3'
services:
  node1:
    image: mongo
    container_name: "node1"
    networks:
      - mongocluster
    ports:
      - 30001:27017
    command: mongod  --dbpath /data/db --replSet repset
  node2:
    image: mongo
    container_name: "node2"
    networks:
      - mongocluster
    ports:
      - 30002:27017
    command: mongod  --dbpath /data/db --replSet repset
    depends_on:
      - node1
  node3:
    image: mongo
    container_name: "node3"
    networks:
      - mongocluster
    ports:
      - 30003:27017
    command: mongod  --dbpath /data/db --replSet repset
    depends_on:
      - node2
networks:
  mongocluster:
    driver: bridge

И вот как я настроил кластер в mongodb

config = {
  "_id": "repset",
  "members": [
    {
      "_id": 0,
      "host": "node1:27017"
    },
    {
      "_id": 1,
      "host": "node2:27017"
    },
    {
      "_id": 2,
      "host": "node3:27017"
    }
  ]
}

Я понимаю, что мой локальный компьютер не может интерпретировать IP для узла 1, узла 2 и узла 3. Я использую его только для целей разработки, так какой самый быстрый (возможно, грязный) способ исправить это?

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Ваше предположение верно.Реплика Mongo установила самоотчеты узла 1, 2, 3 в качестве IP-адреса, и ваш клиент из-за пределов контейнерной сети пытается (безуспешно) добраться до них.

Один простой способ исправить это - поместить вашего клиентавнутри контейнера в той же сети докеров.

Еще один вариант [грязного] - настроить файл hosts на локальном компьютере так, чтобы узел X интерпретировался как локальный хост.Вам нужно настроить номера портов так, чтобы номера портов хоста и контейнера были одинаковыми (запустите mongo на 30001,2,3 в контейнере)

И, возможно, самый простой - забудьте о наборе реплик ипросто запустите автономный контейнер Монго.

0 голосов
/ 05 июня 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...