Почему мой Docker контейнер все еще пытается подключиться к локальному хосту MongoDB в моем Flask Microservice? - PullRequest
0 голосов
/ 17 февраля 2020

У меня два Docker контейнера, работающих в одной мостовой сети (docker0).

  • mongodb - Контейнер MongoDB с моей базой данных
  • usercreate - API-интерфейс Create_User, работающий на flask и вставляющий пользователя в контейнер MongoDB.

Я тестирую в Postman на моем локальном компьютере отправку данных в этот контейнер "usercreate", который будет запись в контейнер MongoDB.

При запуске моих контейнеров usercreate был перенаправлен с портами 5000: 5000 и mongodb - 27017: 27017 (для тестирования).

Все сценарии ios были выполнены с почтальоном .

------- --Сценарий1:

  • localhost: 5000 / createuser

    pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
    

Я перепробовал все конфиги MONGO_URI для имени контейнера mongodb , порт, без порта и только с IP-адресом контейнера.

app.config["MONGO_URI"] = "mongodb://mongodb:27017/User"
app.config["MONGO_URI"] = "mongodb://mongodb/User"
app.config["MONGO_URI"] = "mongodb://172.18.0.2:27017/User"
app.config["MONGO_URI"] = "mongodb://172.18.0.2/User"

--------- Сценарий 2:

I r это приложение usercreate flask на моем локальном хосте через порт 5001 (поскольку контейнер usercreate используется 5000)

  • localhost:5001/createuser

Все работает!

--------- Сценарий 3:

При запуске контейнеров в "хостовой" сети вместо моста, контейнер usercreate также работал.


Я думаю, причина в том, что мой usercreate контейнер пытается найти базу данных Mon go в localhost:27017 вместо mongodb:27017 согласно ошибка в Scenario1 (также показано ниже)

 `pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused`

Как мне получить контейнер usercreate для использования (имя контейнера) : 27017 MONGO_URI вместо localhost: 27017? Кажется, он игнорирует мой MONGO_URI в моей конфигурации Flask.

Могут ли быть другие причины этой ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...