该站点可以在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
。
答案 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
文件。