Flask 应用程序的 Docker 未运行 - 连接错误

时间:2020-12-19 09:54:37

标签: python linux docker ubuntu flask

我正在 docker 中运行 Flask 应用程序,但无法启动它。 我正在使用 Ubuntu 18.04。

发生的情况是,我构建了映像,然后运行,然后在浏览器中的 127.0.0.1:5000 执行操作并收到连接错误。

我构建图像:

sudo docker build -t flask-image:latest .

然后我跑:

sudo docker run -d -p 5000:5000 --name flask_try flask-image:latest

现在,当我在浏览器中访问 127.0.0.1:5000 时,连接失败。

然后我执行 sudo docker ps 并得到:

CONTAINER ID   IMAGE                COMMAND           CREATED         STATUS         PORTS                    NAMES
c161375d3a7a   flask-image:latest   "python app.py"   5 seconds ago   Up 4 seconds   0.0.0.0:5000->5000/tcp   flask_try

我也这样做了:

sudo docker logs flask_try

这里我收到了一些与我导入的库相关的警告,仅此而已。在我看来,有些警告不是问题。有人不这么认为吗?

我也这样做了:

sudo docker exec -it flask_try  /bin/bash

我收到错误“容器未运行”:

Error response from daemon: Container b20b12ac58d461e5e60c5da1873585f03ba2c8c7a2c3d3408e4e46882e2f69d3 is not running

这是我的 Dockerfile 的样子:

FROM python:3.7 as alias_one

RUN apt-get clean && apt-get update
RUN apt-get install -y \
    software-properties-common \
    python3.7 \
    python3-pip \
    wget \
    apt-transport-https \
    build-essential \
    ca-certificates \
    bash \
    perl \
    publicsuffix 

RUN mkdir /local/
WORKDIR /local/

(... install libs with wget, run installation shells etc. ...)

# second image:
FROM python:3.7

# new workdir
WORKDIR /flask_app_dir
ADD . /flask_app_dir

ARG SPACY_VERSION=2.3.4

COPY ./dir1 /flask_app_dir/dir1
COPY ./__init__.py /flask_app_dir/__init__.py
COPY ./config.py /flask_app_dir/config.py
COPY ./app.py /flask_app_dir/app.py


COPY ./requirements.txt /pynlg_root/requirements.txt

COPY --from=alias_one /local/ /local/

# I declare here a path I need
ENV PATH /local/bin:/local/cmd:$PATH

RUN pip install -r requirements.txt
RUN pip install spacy==${SPACY_VERSION}
RUN python -m spacy download fr_core_news_lg
RUN pip install six

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

文件 requirements.txt 包含一行:

flask==1.1.2

我的应用程序(文件 app.py)是这样的。 注意:这个 Flask 应用程序在没有 Docker 的情况下运行良好。

# encoding: utf-8
from flask import Flask
app = Flask(__name__)

( ... imports ...)

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    ( ... run some code that does something ...)
    return_dict = {
        "key1":"value1"
        "key2":"value2"
    }
    return return_dict

if __name__ == '__main_':
    app.run(debug=True, host='0.0.0.0', port=5000)   

欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。事实上,我不得不从我的 Dockerfile 中删除:

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

并将其替换为:

CMD ["flask", "run", "--host", "0.0.0.0"]

这允许在浏览器中看到结果。