什么有效
我在Flask中创建了一个简单的 Web 应用程序,它负责return render_template("index.html")
在 Web 浏览器访问根节点时操作一个简单的应用程序。
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def show_index():
return render_template("index.html")
if __name__ == "__main__":
app.run(port=80)
index.html 是一个简单的页面,它使用tracking.js来获取用户网络摄像头并在实时视频流中跟踪他/她的脸。
打开cmd并输入python app.py
结果Running on http://127.0.0.1:80/
访问上述 URL 会导致页面正确显示,该页面要求我允许使用相机,打开它并在实时视频源中正确跟踪我的脸。所以到这里一切都很好。
什么不起作用
当我使用Docker对我的应用程序进行 dockerize 时,就会出现我遇到的问题。docker-machine ip
是 192.168.99.100
打开 cmd 并输入:docker run -p 4000:80 my_face_track_app
结果:Running on http://0.0.0.0:80/
访问 192.168.99.100:4000 会导致正确显示,index.html
但不再要求我获得相机权限并检查 JS 控制台我读到以下异常:
getUserMedia() no longer works on insecure origins
这里是完整的错误日志:
我知道错误告诉我我没有在 HTTPS 中提供页面。
有没有其他人遇到过这个问题?该问题的正确解决方案或可能的解决方法是什么?任何帮助将不胜感激,在此先感谢您
我为解决问题而尝试做的事情
由于需要页面的 HTTPS 服务才能让 JS 执行该功能getUserMedia()
,因此我通过修改 app.py 来为我的 Flask 应用程序提供 SSL 证书,如下所示:
# app.py
from flask import Flask, render_template
import OpenSSL
app = Flask(__name__)
@app.route("/")
def show_index():
return render_template("index.html")
if __name__ == "__main__":
app.run(port=80, ssl_context="adhoc")
然后我将构建一个新图像的应用程序 docker 化。打字:
docker run -p 443:80 facetrackapphttps
结果是
Running on https://127.0.0.1:80
所以是的,这里 HTTPS 是 ON:问题是 HTTPS Flask App 的端口 80 映射到docker-machine ip
192.168.99.100 的端口 443。
尝试访问 192.168.99.100:443 不起作用,并且没有显示任何内容。
有人知道如何做到这一点吗?