Микросервис flask-restplus недоступен в док-контейнере

речь идет о простом микросервисе flask-restplus с конечной точкой echo, который можно найти здесь, который по умолчанию запускается локально на порту 5000:

cd $src_folder
python app.py

введите здесь описание изображения

но при работе в док-контейнере с простым Dockerfile...

RUN pip install --no-cache-dir -r requirements.txt
CMD [ "python", "./app.py" ]

... с правильным сопоставлением/выставлением портов он по какой-то причине недоступен:

    docker run -d -h $HOST --name $CONTAINER \ 
--publish $SERVER_PORT:$CONTAINER_PORT $DOCKER_HUB_IMG:$IMAGE_VERSION

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

(venv) .../flaskexample$ docker logs flaskexample 
2017-09-17 18:23:12,505 - werkzeug - INFO -  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
2017-09-17 18:23:12,506 - werkzeug - INFO -  * Restarting with stat
2017-09-17 18:23:13,016 - werkzeug - WARNING -  * Debugger is active!
2017-09-17 18:23:13,021 - werkzeug - INFO -  * Debugger PIN: 246-320-471
(venv) .../flaskexample$ 

...а также выглядит нормально в docker ps:

(venv) .../flaskexample$ docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
9d90da7ae192        kakicode/flaskexample:latest   "python ./app.py"        4 minutes ago       Up 4 minutes        0.0.0.0:5000->5000/tcp                                                   flaskexample

..но по какой-то причине я продолжаю получать:

введите здесь описание изображения

... и у меня заканчиваются идеи... должен сказать, что я не предоставляю ИМЯ_СЕРВЕРА в конфигурации flask-restplus, так как это не имеет никакого значения, по-прежнему возникает та же проблема, а также что любой другой контейнер, требующий отображение/отображение портов отлично работает в моем демоне докеров. Я провожу этот эксперимент в Ubuntu 14.04.5.

... кто-нибудь сталкивался с чем-то подобным с flask-restplus?

спасибо всем заранее


person joão tiago viegas    schedule 17.09.2017    source источник
comment
какой URL вы настроили после 127.0.0.1:5000   -  person Akash    schedule 17.09.2017
comment
... есть пользовательский интерфейс swagger в http://localhost:5000/api/ и одна конечная точка http://localhost:5000/api/status/echo   -  person joão tiago viegas    schedule 17.09.2017


Ответы (1)


Ваша проблема в том, что вы использовали бы что-то вроде ниже в своем app.py

app.run(debug=True, port=5000)

или просто

app.run()

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

app.run(debug=True, port=5000, host="0.0.0.0")

Для получения дополнительной справки см.:

http://flask.pocoo.org/docs/0.12/api/?highlight=run#flask.Flask.run

person Tarun Lalwani    schedule 17.09.2017
comment
на месте! Я использовал app.run(debug=Configuration.get("FLASK_DEBUG")) Большое спасибо @tarun-lalwani !!! - person joão tiago viegas; 17.09.2017
comment
Мне пришлось использовать FLASK_APP=app.py flask run -h 0.0.0.0, чтобы сопоставление портов работало правильно для Flask 1.0.2. - person danialk; 29.05.2019