Приложение Flask запускается в докере, но не с хоста - PullRequest
0 голосов
/ 24 октября 2018

У меня есть приложение фляги, которое запускает несколько вещей в зависимости от звонка пользователя.В этом приложении у меня также есть одна базовая конечная точка, которая просто возвращает строку, которая поможет мне увидеть, работает приложение или нет.

@app.route("/hello")
def hello():
    return "Hello World!"

Теперь я попытался докеризовать это приложение, используя this учебник с официального сайта докера.Приложение фляги прослушивает порт 5000, поэтому я добавил запись в свой Dockerfile, чтобы открыть порт 5000.

EXPOSE 5000

И команда, которую я использую в Dockerfile для запуска приложения, -

CMD ["python","model.py"]

Файл model.py содержит код колбы, который вызывает другие функции на основе ввода пользователя.

Теперь, когда я запускаю свое приложение после его контейнера, я вижу требуемый вывод на терминале, что приложение колбы действительно работает.Это команда, которую я использовал для запуска приложения.

docker run -p 5000:5000 firstContainer

Когда я пытаюсь вызвать базовый метод helloWorld, описанный выше, используя запрос http://localhost:5000/hello,, я получаю сообщение об ошибке, сообщающее, что сайтнедоступен.Есть ли что-то, что я делаю неправильно с отображением портов здесь?Как мне исправить эту проблему?

РЕДАКТИРОВАТЬ: Добавление более подробной информации

Поэтому я попытался зайти в контейнер, чтобы увидеть, что происходит, и я смог просмотреть файлы, которые были доступны в контейнереи они выглядят хорошо.Когда я попытался снова запустить приложение в контейнере с помощью базовой команды

python model.py

, он вернул ошибку, сообщающую, что порт уже используется.Так что это должно означать, что приложение действительно прослушивает порт.Я также установил curl внутри контейнера, чтобы просмотреть URL, и он вернул ожидаемую строку, когда я запустил ее внутри контейнера.Я просто не понимаю, как я могу открыть его для внешнего мира

РЕДАКТИРОВАТЬ 2:

Журналы контейнеров

 * Serving Flask app "model" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: on

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Проблема в том, что сервер по умолчанию отвечает только на внутренние запросы.У вас есть два варианта.

Вы можете программно установить хост на:

0.0.0.0

Использовать CMD:

flask run --host=0.0.0.0`

Совет: Существует также контейнер с работающей колбой позади ngnix из коробки.

0 голосов
/ 12 мая 2019

У меня такая же проблема в приложении Flask в контейнере Docker.Я использовал - сеть = хост и решил проблему.

# docker run -it -p 8080:8080 --network=host mbilgen/metacriticv3:1.0
WARNING: Published ports are discarded when using host network mode
 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 258-420-336
127.0.0.1 - - [12/May/2019 03:55:08] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [12/May/2019 03:55:13] "GET /games HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [12/May/2019 03:55:13] "GET /games HTTP/1.1" 200 -
0 голосов
/ 25 октября 2018

попробуйте это:

docker run --rm -it --network=host -p 5000:5000 firstContainer

проблема, вероятно, связана с сетью.поэтому --network = host соединяет контейнер с нижележащим хостом.

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