首页 > 解决方案 > 构建 Python Flask 应用程序的 Docker 映像显示空白 REST 端点路由

问题描述

我正在使用 docker 构建一个烧瓶 restful 项目,但是当我运行 docker 时,暴露的URL显示一个空白页面。

我是 docker 新手,需要一些指导。

我怀疑 Dockerfile 没有很好地指向app.py最终运行该项目的那个。以下是我的项目结构:

project/
     app/
        movie/
          movies.py
     utils/
        tasks.py
     app.py
     requirements.txt

这就是我的app.py文件的样子:

from app import app


@app.route('/', methods=['GET'])
def index():
    return 'Hello World'


if __name__ == '__main__':
    app.run(port=5000, debug=True)

然后,这是我的Dockefile

FROM alpine:latest

MAINTAINER huxyy

RUN apk add --no-cache python3-dev \
    && pip3 install --upgrade pip

WORKDIR /app

COPY . /app

RUN pip3 --no-cache-dir install -r requirements.txt

EXPOSE 5000

#ENTRYPOINT ["python3"]
#
#CMD ["app.py"]

# Run app.py when the container launches
COPY app.py /app
CMD python3 app.py

所以我首先运行了构建命令:

docker build -t flaskapp:latest .

然后在我运行图像之后:

docker run -it flaskapp

所以,我不知道出了什么问题,但我需要一些指导

标签: pythonpython-3.xdockerflask

解决方案


我想问题是您尝试访问应用程序的端口 5000 尽管EXPOSE在 Dockerfile 中使用,但实际上并未发布。

EXPOSE 指令实际上并不发布端口。它充当构建映像的人和运行容器的人之间的一种文档类型,关于打算发布哪些端口。要在运行容器时实际发布端口,请在 docker run 上使用 -p 标志来发布和映射一个或多个端口,或者使用 -P 标志来发布所有暴露的端口并将它们映射到高阶端口。

https://docs.docker.com/engine/reference/builder/#expose

尝试使用-p标志运行容器以发布所需的端口映射,例如:

docker run -it -p 5000:5000 flaskapp

推荐阅读