Подключитесь с хоста к Docker-контейнеру с MongoDB - PullRequest
1 голос
/ 07 июня 2019

У меня проблемы с подключением с моего хост-компьютера (macOS 10.14.5) к mongod, работающему внутри контейнера Docker (Docker версия 18.09.2, сборка 6247962). Я запускаю контейнер, используя опцию --network host, и задаю mongod для прослушивания 0.0.0.0.

docker run --network host --name testmongo -it mongo:latest /bin/bash
root@linuxkit-025000000001:/# mongod --bind_ip 0.0.0.0
2019-06-07T00:28:56.227+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] MongoDB starting : pid=13 port=27017 dbpath=/data/db 64-bit host=linuxkit-025000000001
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] db version v4.0.10
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] modules: none
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten] build environment:
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten]     distarch: x86_64
2019-06-07T00:28:56.232+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2019-06-07T00:28:56.233+0000 I CONTROL  [initandlisten] options: { net: { bindIp: "0.0.0.0" } }

Теперь я ожидаю, что смогу получить доступ к localhost:27017 на своем хост-компьютере и подключиться к серверу mongod, но я продолжаю получать ответ Connection Refused. От jupyter console и использования pymongo:

In [1]: import pymongo                                                                                                                                     

In [2]: client = pymongo.MongoClient(host='localhost', port=27017)                                                                                         

In [3]: client.list_database_names()  

---------------------------------------------------------------------------
ServerSelectionTimeoutError               Traceback (most recent call last)
<ipython-input-3-62f658703d98> in <module>
----> 1 client.list_database_names()

[LONG ERROR MESSAGE]

ServerSelectionTimeoutError: localhost:27017: [Errno 61] Connection refused

Любое понимание того, что я делаю здесь, очень ценится.

1 Ответ

2 голосов
/ 07 июня 2019

Согласно этой ссылке , network host работает только на хостах Linux и не работает на Docker Desktop для MacOs.

Чтобы решить эту проблему, запустите Docker, используя параметр -p, например -p 27017:27017

Пример: docker run -d -p 27017:27017 -v ~/data:/data/db mongo

...