我正在 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)
欢迎任何帮助!
答案 0 :(得分:0)
我解决了我的问题。事实上,我不得不从我的 Dockerfile 中删除:
ENTRYPOINT ["python"]
CMD ["app.py"]
并将其替换为:
CMD ["flask", "run", "--host", "0.0.0.0"]
这允许在浏览器中看到结果。