Отказано в соединении на контейнере MongoDB Docker из контейнера Flask Docker - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть два docker контейнера.

  • Flask app
  • MongoDB

Flask приложение имеет DockerFile, который выглядит как this.

from alpine:latest

RUN apk add --no-cache python3-dev \
    && pip3 install --upgrade pip

WORKDIR /app

COPY . /app

RUN pip3 --no-cache-dir install -r requirements.txt

EXPOSE 5000

ENTRYPOINT ["python3"]

CMD ["app.py"]

Вот так я подключаю свой локальный пн go (не контейнер) из Flask

mongo_uri = "mongodb://host.docker.internal:27017/myDB"
appInstance.config["MONGO_URI"] = mongo_uri
mongo = PyMongo(appInstance)

MongoDB работает на контейнере в mongodb://0.0.0.0:2717/myDB .

Это очевидно, когда я запускаю Flask контейнер с локальным mon go uri, который mongodb://host.docker.internal:27017/myDB, все работает. Но это не должно работать, когда я пытаюсь подключить Mon go Container таким же образом. Контейнер Coz Flask ничего не знает об этом контейнере Mon go.

Мой вопрос: как мне соединить этот контейнер Mon go с контейнером Flask, чтобы я мог запросить Mon go контейнер из Flask контейнер.

Заранее спасибо.

1 Ответ

1 голос
/ 29 апреля 2020

На вашем месте я бы использовал docker -композит .

Решение, использующее docker
Вам нужно узнать IP-адрес вашего контейнера mon go и поместить этот IP в файл конфигурации flask. Имейте в виду, что IP-адрес контейнера может измениться - например, если вы используете более новое изображение.
Найти IP-адрес:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

Решение с использованием docker -compose
В вашем docker -compose файле вы определите две службы - один для flask и один для пн go. В файле конфигурации flask вы можете получить доступ к контейнеру mon go с его именем службы, поскольку обе службы работают в одной сети.

docker -compose.yml:
services: mongo: ... flask: ...

flask конфигурация:
mongo_uri = "mongodb://mongo/myDB"
В этом примере mongo - это имя вашего сервиса go.

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