Как получить доступ к приложению python flask в windows при запуске его в контейнере linux? - PullRequest
0 голосов
/ 08 июня 2018

Я работаю над микросервисом, написанным на python.Мой микросервис отлично работает на моей машине с Windows, и я легко могу это проверить.Тем не менее, на моем контейнере Linux он может работать нормально, но я не могу проверить это.Даже при оптимизации моего кода для доступа к сети, как объяснено здесь .

Так вот мой микросервис:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run(host='0.0.0.0')

- я проверил это, запустив Windows, набрав вкомандная строка:

python.exe app.py

- Я получил сообщение, заканчивающееся на

Работает на http://0.0.0.0:5000/ (нажмите CTRL C, чтобы выйти).

Чтобы проверить свой микросервис, я запустил браузер для доступа: http://localhost:5000/

Я вижу сообщение "Hello World".Так что мое приложение работает отлично.

После этого я начал работать с докером.Вот мой Dockerfile (названный «Dockerfile»).

FROM python
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
RUN pip install Flask
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3"]
CMD ["app.py"]

Вот моя команда сборки:

docker build -t docktoflask .

, которая показывает некоторые результаты, учитывая процесс сборки.

Затем я запустил контейнер с помощью этой команды:

docker run -p 5002:5002 docktoflask

Я получил то же окончательное сообщение, что и в Windows (что примечательно, потому что я указал порт 5002).

После этого япробовал тестировать по этой ссылке: http://localhost:5002/

(конечно, я тоже пробовал http://localhost:5000/)

Безуспешно .... (что означает ошибку браузера вместо Привет, мирсообщение).Ошибка на голландском (мой язык браузера), но означает то же, что и this .

Это раздражает, потому что кажется, что работает, и порт действительно активен.Есть два приложения, к которым я должен иметь доступ из моего браузера (portainer и мое собственное приложение).Я могу получить доступ к Portainer без каких-либо проблем.Как я могу получить доступ к своему микросервису при запуске его в док-контейнере?

my running containers

1 Ответ

0 голосов
/ 08 июня 2018

Команда

docker run -p 5002:5002 docktoflask

означает, что внутренний порт 5002 контейнера будет открыт как порт 5002 хоста (localhost: 5002), даже если внутренний порт 5002 контейнера еще не открыт.

Вы должны изменить это на

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