繁体   English   中英

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

[英]Deploying flask app to Docker - routing/redirect issues

我有一个 Flask 应用程序,它可以在我的计算机上完善并托管在云服务上,但是在使用 docker 将它“容器化”之后,每个POST请求都会产生相同的消息,然后应用程序GET是上一页 - 没有重定向到适当的页。 这是输出的一行:

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"

这是 Dockerfile:

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"]

这是我的项目结构:

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

gunicorn_config.py:

bind = '0.0.0.0:5000'
workers = 2
accesslog = '-'
loglevel = 'development'
capture_output = True
enable_stdio_inheritance = True

谢谢您的意见。

我确切地知道你的感觉如何 :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 路径来解决这个问题......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM