Невозможно соединить Docker с pymongo в Linux - PullRequest
1 голос
/ 23 октября 2019

Я развернул докер-контейнер на цифровой океанской капле (Ubuntu 16.04), который должен подключаться к JAR на двери 9000 и к Mongo на двери 27017 на той же машине. Обе службы (JAR и Mongo) не являются контейнерами и работают на локальном хосте.

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

pymongo.errors.ServerSelectionTimeoutError: 178.128.206.98:27017: timed out

Это то, что я делал до сих пор. Jar начал работать, когда я добавил IP контейнера в правила ufw:

sudo ufw allow from DOCKER_IP to any port 9000

Так что я попробовал то же самое для mongo:

sudo ufw allow from DOCKER_IP to any port 27017

Но снова я получаюв ошибке тайм-аута. Поэтому я следовал некоторым рекомендациям:

1) проблема с драйверами . Затем проблема тайм-аута Я добавил пакет srv with dns, но все равно не работал.

2) Итак, я последовал за сетевым вопросом и прокомментировал дверь с mongod.conf:

sudo nano /etc/mongod.conf

Это теперь выглядит так:

# network interfaces
net:
  port: 27017
# bindIp: 127.0.0.1

Конечно, я перезапустил службу mongo

sudo service mongod restart

Но все равно та же ошибка тайм-аута.

Это все варианты кода Python, которые я пытался прочитать здесь и там:

client = MongoClient('mongodb+srv://MACHINE_IP:27017/') #first variant
client = MongoClient(MACHINE_IP, 27017) #second variant
client = MongoClient('mongodb://mongo:27017/') #third variant

Есть ли другие предложения о том, как подключиться к Монго? И в то же время, почему я могу подключиться к JAR, а не к Монго?

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Ваш mongod.conf выглядит неправильно для вашего варианта использования.

Попробуйте установить net в:

net:
   port: 27017
   bindIpAll: true

, затем перезапустите службу mongod и повторите попытку.

0 голосов
/ 23 октября 2019

Я не буду предлагать разрешить доступ к БД Mongo из-за пределов сети, также не буду предлагать доступ к Mongo из вашего приложения с использованием общедоступного IP-адреса компьютера, лучше для доступа с использованием частного IP .

client = MongoClient('mongodb+srv://PRIVATE_IP:27017/') #first variant
client = MongoClient(PRIVATE_IP, 27017) #second variant

Для третьего варианта он будет работать только в том случае, если оба контейнера входят в одну и ту же сеть или один и тот же файл docker-compose или приложение link и mongo Контейнер.

client = MongoClient('mongodb://mongo:27017/') #third variant

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

Теперь последний вопрос, как вы запускаете оба контейнера? Монго БД работает внутри контейнера?

Вы можете выполнить отладку, используя

docker exec -it mongo_container_id bash

, а затем запустить mongo cli для проверки возможности подключения.

...