![](/img/trans.png)
[英]Build Docker image of a Python Flask app shows a blank REST endpoint route
[英]Build Docker image of a Python Flask app
我正在尝试为 Python Flask 应用程序构建 Docker 映像,但遇到构建问题 - 所有文件都位于名为web
的文件夹中 - 这是项目结构:
web/
__init__.py
app.py
Dockerfile
models.py
requirements.txt
和app.py
目前看起来像这样:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello World!"
if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0')
我从https://www.smartfile.com/blog/dockerizing-a-python-flask-application/借来了Dockerfile
:
FROM ubuntu:14.04
# Update OS
RUN sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y upgrade
# Install Python
RUN apt-get install -y python-dev python-pip
# Add requirements.txt
ADD requirements.txt /webapp
# Install wsgi Python web server
RUN pip install uwsgi
# Install app requirements
RUN pip install -r requirements.txt
# Create app directory
ADD . /webapp
# Set the default directory for our environment
ENV HOME /webapp
WORKDIR /webapp
# Expose port 8000 for uwsgi
EXPOSE 8000
ENTRYPOINT ["uwsgi", "--http", "0.0.0.0:8000", "--module", "app:app", "--processes", "1", "--threads", "8"]
我正在尝试使用docker build --no-cache --rm -t flask-app
构建 Docker 映像,但它以错误消息结束:
Successfully installed uwsgi
Cleaning up...
---> 9bbc004212a3
Removing intermediate container 70ed8f07c408
Step 8/13 : RUN pip install -r requirements.txt
---> Running in f5e2eb59ffd1
Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
Storing debug log for failure in /root/.pip/pip.log
The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1
我认为对您的 Dockerfile 进行很小的更改即可解决此问题:
FROM ubuntu:14.04
# Update OS
RUN sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y upgrade
# Install Python
RUN apt-get install -y python-dev python-pip
# Add requirements.txt
# Create app directory
ADD . /webapp
# Install wsgi Python web server
RUN pip install uwsgi
# Install app requirements
# Full path to requirements
RUN pip install -r /webapp/requirements.txt
# Set the default directory for our environment
ENV HOME /webapp
WORKDIR /webapp
# Expose port 8000 for uwsgi
EXPOSE 8000
ENTRYPOINT ["uwsgi", "--http", "0.0.0.0:8000", "--module", "app:app", "--processes", "1", "--threads", "8"]
我刚刚添加了requirements.txt
的完整路径,这可以通过几种不同的方式完成,比如复制整个目录文件夹然后构建它。
在添加需求之前,我替换了Dockerfile
的初始行
FROM ubuntu:latest
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
它成功地构建了图像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flask-app latest 32b81efb5719 2 minutes ago 644.9 MB
ubuntu latest 104bec311bcd 5 weeks ago 129 MB
$
$ docker run -d flask-app
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73ae8baa93c2 flask-app "uwsgi --http 0.0.0.0" 6 seconds ago Up 5 seconds 8000/tcp lucid_heyrovsky
$
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 73ae8baa93c2
172.17.0.2
因此,当我尝试指向 URL http://172.17.0.2:8000/
我什么也得不到。
添加
WORKDIR /webapp
前
RUN pip install -r requirements.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.