【发布时间】: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 dosudo dockerps`,我可以看到与容器关联的图像,正如我上面写的那样。 -
您包含的
docker ps输出表明容器正在运行;docker run命令似乎是正确的(并且您不需要单独启动容器)。当您说“它不起作用”时,您遇到了什么问题? -
我更新了答案:当我尝试连接到 127.0.0.1:5000 时,在浏览器中出现“连接失败”。如果我在没有 Docker 的情况下使用 Flask 进行尝试,它可以工作,并且我会在浏览器中得到结果。我知道当 Flask 应用程序中的解析结束时 docker 容器停止,这是我在浏览器中看不到任何内容的原因吗?如果是这种情况,我如何测试应用程序是否正常工作并返回良好的结果?回声?
-
现在还有一件事:当我跑步时,它会在某个时刻停止,我没有收到任何错误,只是警告。此外,我认为它没有运行,因为我看到了写有
<container_name> Running on <host>:<port>的其他控制台截图。而我没有这个,有问题吗?
标签: python linux docker ubuntu flask