Сервис Docker Swarm: подключение MongoDB - PullRequest
0 голосов
/ 20 декабря 2018

Я экспериментирую с роем докеров.Я столкнулся с этой проблемой, когда я пытаюсь настроить кластер mongodb.Я создал рой из 3 узлов.Я запустил 3 службы mongodb (mongo1, mongo2, mongo3) в каждом из узлов.Все сервисы находятся в одной сети под названием mongo.Я не могу подключиться к какой-либо другой службе Монго из другой службы Монго.

mongo_client=556a565e88d1
docker exec -it $mongo_client mongo mongo1/foo
docker exec -it $mongo_client mongo mongo2/foo
docker exec -it $mongo_client mongo mongo3/foo

Приведенные выше команды mongo не могут подключиться.Основываясь на сообщениях об ошибках, я узнал, что каждое из имен хостов mongo1, mongo2, mongo3 разрешается правильно.Я могу видеть IP-адрес в сообщениях об ошибках как 10.0.0.2:27017, 10.0.0.36:27017 & 10.0.0.40:27017.

Пример ошибки:

MongoDB shell version: 3.2.21
connecting to: mongo3/foo
2018-12-20T02:45:05.042+0000 W NETWORK  [thread1] Failed to connect to 10.0.0.40:27017, in(checking socket for error after poll), reason: errno:111 Connection refused
2018-12-20T02:45:05.043+0000 E QUERY    [thread1] Error: couldn't connect to server mongo3:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6

exception: connect failed

Я не могу понять причину.Я могу подключиться к Монго из того же контейнера через порт 27017, он работает.Но, когда я попытался подключиться, используя 10.0.0.2:27017, это не удалось.

Может быть, mongod слушает только по локальному адресу.Я следовал этой статье .При этом упоминается, что соединение с mongo основано на имени службы.Если бы mongod прослушивался на любом другом порту, его бы упомянули в статье.

Обновление

Я проверил IP-адрес контейнера, на котором запущен mongod.Это 10.0.0.44, в то время как имя службы для него разрешено до 10.0.0.43.Я вижу разницу между IP-адресом контейнера и IP-адресом сервиса.Я попытался подключиться к Mongod, используя IP-адрес контейнера из другого контейнера в той же сети, и это сработало.

Это показывает, что контейнеры в одной и той же оверлейной сети могут взаимодействовать друг с другом, используя IP-адрес.Но как использовать имя сервиса для подключения к mongod?

Любые разъяснения по этому вопросу были бы признательны.

Спасибо!

...