Я экспериментирую с роем докеров.Я столкнулся с этой проблемой, когда я пытаюсь настроить кластер 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?
Любые разъяснения по этому вопросу были бы признательны.
Спасибо!