【问题标题】:Docker for Flask application is not running -connection error用于 Flask 应用程序的 Docker 未运行 - 连接错误
【发布时间】:2021-03-29 18:53:58
【问题描述】:

我正在 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)   

欢迎任何帮助!

【问题讨论】:

  • 怎么不工作?您如何尝试连接到它,您会得到什么响应?
  • 我构建映像,然后运行:sudo docker run -d -p 5000:5000 --name flask_try flask-image:latest。我需要做其他事情吗?我还看到了'sudo docker start . Do I have to use it ? After run, if I do sudo docker ps`,我可以看到与容器关联的图像,正如我上面写的那样。
  • 您包含的docker ps 输出表明容器正在运行; docker run 命令似乎是正确的(并且您不需要单独启动容器)。当您说“它不起作用”时,您遇到了什么问题?
  • 我更新了答案:当我尝试连接到 127.0.0.1:5000 时,在浏览器中出现“连接失败”。如果我在没有 Docker 的情况下使用 Flask 进行尝试,它可以工作,并且我会在浏览器中得到结果。我知道当 Flask 应用程序中的解析结束时 docker 容器停止,这是我在浏览器中看不到任何内容的原因吗?如果是这种情况,我如何测试应用程序是否正常工作并返回良好的结果?回声?
  • 现在还有一件事:当我跑步时,它会在某个时刻停止,我没有收到任何错误,只是警告。此外,我认为它没有运行,因为我看到了写有<container_name> Running on <host>:<port> 的其他控制台截图。而我没有这个,有问题吗?

标签: python linux docker ubuntu flask


【解决方案1】:

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

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

然后将其替换为:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2022-01-18
    • 1970-01-01
    • 2017-08-02
    • 2018-10-21
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多