首页 > 解决方案 > Docker Flask 应用程序多次加载图像

问题描述

我的 Docker Flask 应用程序多次加载图像。该页面的加载速度非常慢,因为它发出了几个相同的请求。我可以在 Chrome 开发工具网络中看到它。该应用程序在我的开发环境中运行良好。我对 Docker 很陌生。

我认为这与IP和端口设置有关。我已经尝试了每个 IP/端口设置的几种排列,但收效甚微。要么我在任何地址都找不到我的应用程序,要么它可以工作,但会多次重新加载图像并且速度很慢。

烧瓶:

from grocery import create_app
app = create_app()
if __name__ == '__main__':
    app.run(host ='0.0.0.0', debug=False)

Dockerfile:

FROM python:3.6.8-slim
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME Grocery
CMD ["python", "run.py"]

码头工人命令:

docker build --tag=grocery .
# this is what has worked to get to the app running 
docker run -p 5000:5000 --env-file .env grocery

然后在以下位置找到应用程序:

http://127.0.0.1:5000/

我希望该应用程序只运行一次并加载图像。我在这里不知所措。任何帮助将非常感激。

编辑: html/css/js 文件在我的本地机器上。图像位于 s3 和 CloudFront 中。不确定这是否会有所作为。

Edit2:添加更多代码,因为我能够找到问题。请看下面我的回答。

@main.route('/cdn/<path:filename>')
def custom_static(filename):

    return redirect(urljoin(os.environ['CLOUDFRONT_CDN_MAIN'], filename))

.env 文件

CLOUDFRONT_CDN_MAIN="https://example.com"

标签: python-3.xdockerflask

解决方案


该问题是由烧瓶重定向和包含引号的 .env 文件引起的。在 pipenv shell 中运行时,我的代码运行良好。在 docker 中运行时,返回重定向将引号添加到重定向中并导致无限重定向循环。

我变了:

CLOUDFRONT_CDN_MAIN="https://example.com"

至:

CLOUDFRONT_CDN_MAIN=https://example.com

现在一切正常。


推荐阅读