@wasserbord

Почему именно MongoDB не может нормально «проброситься» в Docker-контейнер с хоста?

ОС хоста - Ubuntu.

Обратите внимание в каком именно направлении я хочу "пробросить монгу",
Итак, монго слушает именно на хосте - а вот подключиться к ней нужно из контейнера.

При этом решение не должно быть "огульным", потому что в том же самом приложении есть и еще связанное с сетью (правда, другие порты), и к примеру --net=host все это дело просто портит. Решение по возможности должно затрагивать только монгу.

Бьюсь над этой проблемой уже много часов. Объем геморроя немного поражает.
Например, сперва пытался подключаться монго-клиентом (mongocxx) через localhost, а localhost привязать к нужному IP через hosts (в контейнере, разумеется). Но эта идея просто провалилась. Дело в том, что --add-host работает криво, он только добавляет запись в hosts, но не удаляет дубли, которые для localhost как раз-таки имеются. А любые попытки настроить hosts во время сборки, перед запуском контейнера - проваливаются, потому что при запуске он зачем-то подменяется.
Зачем почтенные разработчики докера придумали такой --add-host - я нифига не понял.

Далее. В итоге я решил просто точно определить нужный IP - а для этого написал свои клиент и сервер на питоне и с ними экспериментировал.
Результат: IP этот - 172.17.0.1.
Т.е. если в докере клиент коннектится к 172.17.0.1, а сервер на хосте слушает 0.0.0.0, то все ок.
Так было с моим самописным клиент-сервером.

И я решил поднимать монгу на 0.0.0.0, а подключать пока что прямо к 172.17.0.1, а потом видно будет как сюда прикрутить локалхост - через iptables и т.д.
Но увы - даже это не сработало!
Тогда я убил службу монги, поднял свой питоний сервер на порту монги, запустил прожку с mongocxx в докере - и что бы вы думали? Приходят accept'ы!
Убил питоний сервер, запустил опять монгу - ошибка, не может подключиться. Опять питоний сервер - опять accept'ы приходят.
А с настоящей монгой - не работает. Чего вот ей не хватает...

Смотрю netstat -tlnp на хосте в обоих случаях - одно и то же... 0.0.0.0.

...Понятно, что можно раскопать еще дальше - сниффить все сегменты TCP в обоих случаях, разбирать по байтам, думать, пробовать еще варианты... Но, возможно, кто-то даст ответ быстрее?

UPD: На всякий случай, uri: "mongodb://172.17.0.1:27017/Loremipsum", по нему создается mongocxx::uri, а по нему mongocxx::client, без лишних параметров.
  • Вопрос задан
  • 789 просмотров
Пригласить эксперта
Ответы на вопрос 1
yellow79
@yellow79
Senior Software Engineer
Вероятно ваша монга хочет, чтоб к ней конектились только с локалхоста, попробуйте поковырять её конфиги на предмет изменения bindIp или bindIpAll
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы