Почему я не могу подключиться к серверу flask в контейнере docker? - PullRequest
0 голосов
/ 24 марта 2020

Моя виртуальная машина - CentOS 7, а docker - 19.03.8. Я создаю свое собственное изображение python-image. Я запускаю следующие коды для создания нового контейнера:

docker run -it -p 5555:5000 python-image /bin/bash

В контейнере сценарий python с именем test.py выглядит следующим образом:

# test.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def func():
    return "Hello docker!"


if __name__ == '__main__':
    app.run('0.0.0.0', port=5000)

Затем я запускаю python test.py и выше контейнера.

В хост-оболочке я запускаю curl http://127.0.0.1:5555/, и он печатает:

curl: (56) Recv failure: Connection reset by peer

Я знаю, что при указании --network как host при создании контейнер:

docker run -it --network host python-image /bin/bash

Запуск сервера и запуск curl http://127.0.0.1:5555/ на хосте получит ожидаемую информацию. Интересно, что мне делать, если оставить значение по умолчанию --network, чтобы получить тот же результат.

1 Ответ

0 голосов
/ 24 марта 2020

Если не указано, сетью по умолчанию, используемой Docker, является Мостовая сеть . Чтобы получить доступ к контейнеру, вы должны использовать его собственный IP-адрес. Можно найти IP-адрес контейнера с помощью:

$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

, а затем заменить его на 127.0.0.1.

Или вы можете сохранить его в переменной и попробовать :

$ container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id)
$ curl http://${container_ip}:5555

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