Установите переменные environemnt в Dockerfile, сервер flask не работает - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно установить окружение в моем Dockerfile (я не могу использовать docker -compose, потому что мне понадобится этот dockerfile для kubernetes). Вот мой Dockerfile:

FROM tensorflow/tensorflow:2.1.0-py3

RUN apt -qq -y update \
    && apt -qq -y upgrade

WORKDIR /socialworks-api
COPY . /socialworks-api

RUN python -m pip install --upgrade pip

RUN apt -y install git

#for mysql
RUN apt install -y libmysqlclient-dev

RUN pip --no-cache-dir install -r requirements.txt
EXPOSE 5000
CMD ["/bin/bash", "./start.sh"]

Вот мой старт. sh file:

#!/bin/bash
export $(grep -v '^#' env/docker.env | xargs)
source env/docker.env
python app.py

Вот где я запускаю мой flask сервер в app.py:

if __name__ == '__main__':
    print("test")
    socketio.run(app, host="0.0.0.0", debug=True, use_reloader=False)

Проблема в том, что после этих команд я пытаюсь запустить свой контейнер docker, и сервер flask запускается (он даже печатает тест в терминале), и когда я пытаюсь запустить http://0.0.0.0: 5000 / Мне не удалось подключиться к проблеме в браузере. Может быть, проблема с CMD в моем файле dockerfile или в файле start. sh? Я новичок в Docker. Любая помощь будет оценена. Локально все отлично работает. Вот команда, которую я использую для запуска контейнера docker:

docker run -it flaskapp

Вот docker пс:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
337f1bdacb3e        flaskapp            "/bin/bash ./start.sh"   44 seconds ago      Up 42 seconds       5000/tcp            dazzling_mcclintock

Вот журналы:

docker logs 337f1bdacb3e
[nltk_data] Downloading package punkt to /root/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.
2020-04-20 10:02:44.287504: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-04-20 10:02:44.309581: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2394225000 Hz
2020-04-20 10:02:44.310031: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x4971910 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-04-20 10:02:44.310068: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
test
(10) wsgi starting up on http://0.0.0.0:5000

Логи те же, что и при локальном запуске, все работает. Может ли быть так, что приложение flask как-то останавливается при запуске?

1 Ответ

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

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

docker run -it -p 5000:5000 flaskapp.

. Это говорит docker о том, чтобы сопоставить порт 5000 в работающем контейнере (первые 5000) с портом 5000 на ваш локальный компьютер (второй 5000) [Если вы хотите запустить на нем, например, порт 8080 на локальном компьютере, вместо этого будет установлен флаг -p 5000:8080].

Когда вы это сделаете, секция портов выведет из docker ps должен выглядеть примерно так:

0.0.0.0:5000->5000/tcp

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