将Flask应用部署到Docker-路由/重定向问题

时间:2018-09-19 17:24:59

标签: docker flask

我有一个flask应用程序,该应用程序可以在我的计算机上完美运行,并且还托管在云服务上,但是,在每个POST请求中,使用docker对它进行“容器化”后,都会产生相同的消息,然后该应用程序{{1} } s上一页-没有重定向到适当的页面。这是输出的一行:

GET

这是Dockerfile:

172.24.0.1 - - [19/Sep/2018:17:12:31 +0000] "POST /login HTTP/1.1" 302 209 "http://127.0.0.1:5000/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

FROM ubuntu:16.04 #set container enviroment variables ENV FLASK_APP app.py #apt-get and system utilities RUN apt-get update && apt-get install -y\ curl apt-utils apt-transport-https debconf-utils gcc build-essential g++5\ && rm -rf /var/lib/apt/lists/* #python libraries RUN apt-get update && apt-get install -y\ python3-pip python3-dev python3-setuptools \ --no-install-recommends \ && rm -rf /var/lib/apt/lists/* #install necessary locales RUN apt-get update && apt-get install -y locales \ && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ && locale-gen #copy flask app module COPY app app COPY gunicorn_config.py requirements.txt ./ #install packages RUN pip3 install --upgrade pip RUN pip3 install -r requirements.txt #expose application port EXPOSE 5000 CMD ["gunicorn", "--config", "gunicorn_config.py", "app.app:app"]

docker-compose.yml

这是我的项目结构:

version: '3'
services:
  plain_app:
    image: plainapp:1.1.0
    ports:
      - 5000:5000
    working_dir: /app
    command: ["gunicorn", "--config", "../gunicorn_config.py", "app:app"]

gunicorn_config.py:

-project_home
  - app
  Dockerfile
  docker-compose.yml
  requirements.txt
  gunicorn_config.py

谢谢您的输入。

1 个答案:

答案 0 :(得分:0)

我完全知道你对伴侣的感觉:D Flask今天为React.js应用提供服务时也遇到了同样的问题...

在我创建映像(在同一服务器上,具有相同文件)后,它在我的PC和服务器,总线上都运行良好,无法加载静态文件,并使用392 HTTP答案将其重定向

解决此问题的关键是更改路径。

之前:

  • template_folder = ".../html"
  • static_folder = ".../html/static"

之后:

  • template_folder = ".../html"
  • static_folder = ".../html"
  • static_url_path = "/static"

您无法在Docker中使用static_files。您必须告诉客户端在主目录中搜索静态文件,然后添加“ static”作为前缀。它在与static_folder = ".../html/static"相同的文件夹中搜索,但是Docker无法以某种方式使用此方法。因此,您必须使用url路径来解决问题。