подключить robomongo к док-контейнеру mongoDB

Я запускаю приложение NodeJS с docker-compose. Все работает нормально, и я могу видеть все свои данные, подключившись к Mongo внутри контейнера. Но когда я подключаюсь к RoboMongo, я не вижу никаких данных.

Как я могу справиться с этой проблемой?


person migorman    schedule 01.03.2016    source источник
comment
Не могли бы вы поделиться некоторыми подробностями или, возможно, скриншотом того, что вы пробовали до сих пор?   -  person SiddAjmera    schedule 01.03.2016
comment
эй, Сиддхарт Аджмера, я просто пытаюсь увидеть свои данные с помощью robomongo, но это ничего не показывает, mongoDB работает внутри док-контейнера   -  person migorman    schedule 01.03.2016
comment
Видите ли вы свои базы данных и коллекции в RoboMongo?   -  person SiddAjmera    schedule 01.03.2016
comment
я просто вижу имя моей базы данных, но коллекции не отображаются :(   -  person migorman    schedule 01.03.2016
comment
Дважды щелкните по своей коллекции. Вы получите 3 папки в иерархии: Коллекции, Функции, Пользователи. Двойной щелчок по вашим коллекциям покажет вам ваши коллекции в этой базе данных.   -  person SiddAjmera    schedule 01.03.2016
comment
Да, но в моем случае collections(0) пусты   -  person migorman    schedule 01.03.2016
comment
Это странно. Какую версию RoboMongo и MongoDB вы используете?   -  person SiddAjmera    schedule 01.03.2016
comment
он работает очень хорошо, когда я использую локальную mongoDB, но эта проблема возникает, когда экземпляр mongoDB работает внутри контейнера докеров.   -  person migorman    schedule 01.03.2016
comment
Возможно, вам следует выполнить туннельное подключение Robomongo SSH к MongoDB внутри контейнера докеров.   -  person André Bonna    schedule 01.03.2016
comment
Андре Бонна, спасибо за ответ, даже если я понятия не имею об этом: D, я посмотрю, как это сделать.   -  person migorman    schedule 01.03.2016
comment
Я работаю и отвечаю. Подожди! знак равно   -  person André Bonna    schedule 01.03.2016
comment
Можете ли вы установить простое SSH-подключение к контейнеру Docker?   -  person André Bonna    schedule 01.03.2016
comment
я новичок в докере, не могу сделать это внутри контейнера докера, спасибо Андре Бонна за вашу помощь :)   -  person migorman    schedule 01.03.2016


Ответы (7)


Вы должны выполнить туннельное подключение Robomongo SSH к MongoDB внутри контейнера Docker. Прежде всего, вы должны установить ssh-сервер внутри вашего док-контейнера.

https://docs.docker.com/engine/examples/running_ssh_service/


После этого вам нужно настроить подключение в Robomongo. Внутри «Настройки подключения» есть вкладки конфигурации вашего подключения Robomongo.

Перейдите на вкладку «SSH» и настройте SSH-соединение с докер-контейнером. После этого перейдите на вкладку «Подключение» и настройте подключение к MongoDB, как если бы оно было в области локального хоста.

person André Bonna    schedule 01.03.2016
comment
У меня это не сработало, поэтому я нашел обходной путь, который лучше соответствует философии докеров: сделал докер ssh, как описано, затем запустил его с параметром -link _mymongodocker_ (и сопоставлением портов для 22, так что я обязательно найду его без труда). Затем в robomongo вместо localhost я использую mymongodocker (поскольку он связан, он доступен из докера ssh). Работает как шарм, даже если --link устарел и должен быть заменен более современным подходом, пока что я слишком ленив :) - person Edwin Joassart; 19.08.2016

Есть еще один способ. Ты сможешь

  1. SSH с Robomongo на ваш фактический виртуальный сервер, на котором размещены ваши докер-приложения (вкладка SSH, отметьте «Использовать туннель SSH» и заполните другие поля соответственно)
  2. Теперь подключитесь к той же машине в вашем терминале по ssh.
  3. docker ps должен показать вам ваш контейнер MongoDB.
  4. docker inspect <mongo container id> распечатает полную информацию об этом контейнере. В конце найдите IPAddress, это даст вам локальный IP-адрес контейнера.
  5. На вкладке «Подключение» в Robomongo используйте этот IP-адрес контейнера для подключения.

Еще одно замечание: убедитесь, что вы никоим образом не раскрываете свои сервисные порты mongodb (ни Dockerfile, ни docker-compose.yml), потому что это сделает вашу базу данных доступной отовсюду. Предполагая, что вы не настроили имя пользователя и пароль для этой службы, вас скоро просканируют и взломают.

person Maxim Zubarev    schedule 24.05.2017
comment
Это единственный правильный ответ для меня, поскольку я нахожусь на облачном сервере, и я, конечно же, не буду раскрывать порт своей базы данных или изменять какие-либо из своих контейнеров. Благодарю вас! - person Ben; 23.06.2017
comment
я использовал ecpose в моем файле компоновки докеров. Это только открывает порт внутри сервера. Таким образом, вы можете использовать экспозицию, но не порты. Это откроет его для всех. Кто-то не согласен? - person otto; 13.11.2018
comment
Поиск IP-адреса контейнера MongoDB был полезен, спасибо. - person spacedev; 30.10.2019

Самый простой способ — включить пересылку самого контейнера Mongo, вот как выглядит мой docker-compose.

mongo:
  image: mongo
  restart: always
  ports:
    - 27017:27017
person Pratyush    schedule 09.09.2018
comment
для целей разработки я использую этот метод - person rslhdyt; 15.11.2018

Я столкнулся с другой проблемой. Я установил MongoDB локально. Итак, когда MongoDB на докере работала, она конфликтовала с той, что работала на моем хосте. Я установил его с помощью brew.

Итак, я побежал

brew services stop mongodb-community

а затем я перезапустил Robo3t. Я видел базы данных, созданные в MongoDB, работающие на докере.

Вуаля!

person rash.tay    schedule 20.06.2020
comment
чувак помог! спасибо за эту инфу. Будущие люди читают: обязательно проверьте это, если вы установили mongo с brew, прежде чем пытаться подключиться к mongo, работающему в контейнере. - person finiteloop; 08.08.2020
comment
@finiteloop Рад быть полезным :) - person rash.tay; 08.08.2020
comment
Это должно быть решением в большинстве случаев. Спасибо за этого человека - person Sean Konig; 01.05.2021
comment
@SeanKonig Рад быть полезным :) - person rash.tay; 25.05.2021

Обратите внимание, что, возможно, вы не сможете использовать ssh, потому что это была просто проблема несовместимости между mongo и robomongo.

«Robomongo v8.5 и ниже не поддерживает MongoDB 3». Это не имеет ничего общего с докером.

person migorman    schedule 02.03.2016

Сначала войдите в систему с данными для входа по ssh

  1. ssh -i yourpemfile.pem имя_пользователя@ipaddress введите здесь описание изображения

  2. Проверьте идентификатор запущенного контейнера для MongoDB

    докер пс-а

  3. затем проверьте идентификатор контейнера монго

докер проверяет container_id

введите здесь описание изображения

  1. Затем откройте robo3t

создайте новое соединение и добавьте идентификатор контейнера, используйте данные входа ssh для подключения к mongodb

введите здесь описание изображения введите здесь описание изображения

person Surendra Kumar Ahir    schedule 28.01.2021

В файле docker-compose вы можете открыть порт хосту.

Например, следующий код предоставит порт 27017 внутри машины для порта 27018 на хосте.

app:
  image: node
  volumes:
    - /app
  ports:
    - "27018:27017"

Затем, если у вас установлена ​​docker-machine и ваша машина по умолчанию, вы можете сделать в терминале:

docker-machine ip default

Это даст вам IP-адрес вашего хоста, например 192.168.2.3. Адрес вашей базы данных (хост) будет 192.168.2.3 и порт 27018.

Если ваша док-машина не является виртуальной и является вашей ОС, адрес вашей базы данных будет localhost и порт 27018.

person haverchuck    schedule 01.03.2016
comment
да Haverchuck это то, что я сделал, но кажется, что для robomongo нужно еще несколько конфигураций :) - person migorman; 01.03.2016