Docker Flask-jinja2.exceptions.TemplateNotFound错误

时间:2019-11-13 15:57:27

标签: python docker flask

该站点可以在Docker容器外部正常加载。我浏览了其他帖子,并尝试了他们的解决方案,但它们对我不起作用。

我正在运行Windows 7和Docker Quickstart Terminal。我正在使用192.168.99.100 IP访问该网站。

我的目录结构是:

- static
    - style.css
- templates
    - index.html
- app.py
- Dockerfile
- requirements.txt

app.py

from flask import Flask, render_template

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile

FROM python:3.7.5

EXPOSE 5000

RUN mkdir -p /app

COPY static /app
COPY templates /app
COPY app.py /app
COPY requirements.txt /app

WORKDIR /app

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

ENTRYPOINT ["python", "app.py"]

我的docker命令为:

docker build -t "web-app" -f ./Dockerfile .
docker run -p 5000:5000 "web-app"

尝试访问网站http://192.168.99.100:5000/时出现错误jinja2.exceptions.TemplateNotFound: index.html

2 个答案:

答案 0 :(得分:2)

1.TestBench.test_1 ... setup False ok 1.TestBench.test_2 ... setup True SKIP: Skipping this test ---------------------------------------------------------------------- XML: /home/aladin/audio_subsystem_tests/nosetests.xml ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK (SKIP=1) 添加到您的RUN ls /app中。我相信您会发现Dockerfile会将COPY templates /app的内容复制到templates,而不是复制目录本身。

您可以将/app更改为:

Dockerfile

或者,您可以将布局更改为:

COPY static /app/static
COPY templates /app/templates
COPY app.py /app
COPY requirements.txt /app

,然后将您的- app - static - style.css - templates - index.html - app.py - requirements.txt - Dockerfile 命令简化为:

COPY

答案 1 :(得分:1)

来自Flask文档:

  

Flask将在模板文件夹中查找模板。因此,如果您的应用程序是一个模块,则该文件夹位于该模块旁边,如果它是一个包,则它实际上位于您的包中:

     

案例1:一个模块:

/application.py
/templates
    /hello.html
  

案例2:一个包裹:

/application
    /__init__.py
    /templates
        /hello.html

如果您的应用程序位于软件包中(案例2),则需要包含一个__init__.py文件。