docker - 将烧瓶应用程序部署到 Docker - 路由/重定向问题
问题描述
我有一个烧瓶应用程序,它可以在我的计算机上完美运行,也可以托管在云服务上,但是在使用 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"
不知何故,你不能static_files
在 Docker 中使用。您必须告诉客户端在主目录中搜索静态文件并添加“静态”作为前缀。它在同一个文件夹中搜索,static_folder = ".../html/static"
但不知何故 Docker 无法使用此方法。因此,您必须使用 url 路径来解决问题...
推荐阅读
- javascript - JavaScript Promise 没有返回正确的值
- php - JsGrid 和 laravel
- javascript - 打印 N-Queen 问题中的所有解决方案
- android - 更改 Google 地点自动填充预测的语言
- c# - DocumentDb DocumentClient 获取前 25 个文档
- azure-cosmosdb - MongoDB 计数没有给出真实的结果
- c# - app.config 错误“损坏或包含无效的 XML”?
- c# - 每个基类设计的接口
- node.js - 如何在sails.js 中实现对路由和函数的权限?
- c# - C#从共享相同外键SQL的不同列中读取多行