flask приложение работает в docker контейнере, недоступном с хоста - PullRequest
0 голосов
/ 02 февраля 2020

Это мой Dockerfile:

FROM ubuntu:latest

ENV LANG C.UTF-8 
ENV LC_ALL C.UTF-8
ENV VIRTUAL_ENV=/opt/flask_venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
ENV FLASK_ENV development

RUN apt update -y && apt upgrade -y && apt install -y python3 python3-venv net-tools
RUN python3 -m venv $VIRTUAL_ENV

COPY . /opt/my_app
WORKDIR /opt/my_app
RUN python3 -m pip install wheel
RUN python3 -m pip install -r requirements.txt

EXPOSE 5656
ENTRYPOINT [ "python3" ]
CMD ["app.py"]

Вот как я запускаю контейнер:

docker run --name flask_container -d -p 5001:5656 flask_app:0.0.1

Это мой app.py

if __name__ == "__main__":
    app.run(ssl_context="adhoc", host="0.0.0.0", port=5656)

Когда Я go до https://localhost: 5001 в моем браузере, я не могу установить соединение с приложением (Chrome: Этот сайт не может быть достигнут).

Где я ошибаюсь?

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

Заполните app.py

#!/usr/bin/env python3
import os

from flask_migrate import Migrate

from app_directory import app_factory, db
from cli_commands import register

app = app_factory(os.getenv("ENV_VAR") or "dev")
migrate = Migrate(app, db)

register(app, db)

if __name__ == "__main__":
    app.run(ssl_context="adhoc", host="0.0.0.0", port=5656)

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Я заставил его работать с этим докер-файлом:

# docker build . -t flask_app
# docker run --name flask_container -p 4567:5000 flask_app
FROM ubuntu:latest

ENV LANG C.UTF-8 
ENV LC_ALL C.UTF-8
ENV VIRTUAL_ENV=/opt/flask_app/flask_venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
ENV FLASK_ENV development

RUN apt update -y && apt upgrade -y && apt install -y python3 python3-venv

RUN python3 -m venv $VIRTUAL_ENV

RUN groupadd -r flask_group && useradd -r -m -g flask_group flask_user

COPY . /opt/flask_app/my_app
WORKDIR /opt/flask_app/my_app
RUN python3 -m pip install wheel
RUN python3 -m pip install -r requirements.txt

RUN chown -R flask_user:flask_group /opt/flask_app
USER flask_user

ENTRYPOINT [ "python3" ]
CMD ["app.py"]

Я думаю, что разоблачение порта было проблематичным c, но я все еще не на 100% в чем проблема.

0 голосов
/ 02 февраля 2020

Если вы хотите отладить свой контейнер docker, я предлагаю не использовать флаг -d, если вы не абсолютно уверены, что все работает так, как должно.

В вашем случае, если вы убрав флаг -d, вы увидите, что ваш сценарий python неполон:

docker run --rm --name flask_container -p 5001:5656 so
Traceback (most recent call last):
  File "app.py", line 5, in <module>
    app.run(ssl_context="adhoc", host="0.0.0.0", port=5656)
NameError: name 'app' is not defined

Быстрое исправление будет иметь следующее app.py:

from flask import Flask
app = Flask(__name__)

if __name__ == "__main__":
    app.run(ssl_context="adhoc", host="0.0.0.0", port=5656)

После перестроив образ, теперь это приводит к:

docker run --rm --name flask_container -p 5001:5656 so
 * Serving Flask app "app" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on https://0.0.0.0:5656/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 423-289-631

Теперь вы можете перезапустить контейнер с помощью -d :)

docker run --rm --name flask_container -d -p 5001:5656 so
2c777b21c96f080c05df714c339c80ca88c9943e64cc0de12d05544c3d81faba
apoehlmann:~/workspace/teststuff/stackoverflow$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                               NAMES
2c777b21c96f        so                   "python3 app.py"         3 seconds ago       Up 1 second         0.0.0.0:5001->5656/tcp              flask_container
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...